作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 Python 新手。我有一个字典列表,如下所示
[
{
'key1': 'value1',
'key2': [
{
'id': 1,
'name': 'name1'
},
{
'id': 2,
'name': 'name2'
},
{
'id': 3,
'name': 'name3'
}
]
},
{
'key1': 'value1',
'key2': [
{
'id': 1,
'name': 'name1'
},
]
},
{
'key1': 'value1',
'key2': [
{
'id': 1,
'name': 'name1'
},
]
}
]
我想将这个列表转换为基于通用 key2-id 的列表列表,结果列表如下所示
[
[
{
'key1': 'value1',
'key2': [
{'id': 2, 'name': 'name2'},
{'id': 3, 'name': 'name3'}]}
],
[
{
'key1': 'value1',
'key2': [{'id': 1, 'name': 'name1'}]
},
{
'key1': 'value1',
'key2': [{'id': 1, 'name': 'name1'}]
},
{
'key1': 'value1',
'key2': [{'id': 1, 'name': 'name1'}]}
]
]
我尝试使用 itertool 中的 gropby
来完成此操作,如下所示:
from itertools import groupby
def _group_by_key2_ids(results):
groupby_iterator = groupby(
results,
lambda x: [item.get('id') for item in x.get('key2')]
)
return [list(x) for _, x in groupby_iterator]
它没有给出我想要的结果。它的输出看起来像
[
[
{
'key1': 'value1',
'key2': [
{'id': 1, 'name': 'name1'},
{'id': 2, 'name': 'name2'},
{'id': 3, 'name': 'name3'}]}
],
[
{
'key1': 'value1',
'key2': [{'id': 1, 'name': 'name1'}]
},
{
'key1': 'value1',
'key2': [{'id': 1, 'name': 'name1'}]}]
]
请让我知道我们如何做到这一点。任何帮助,将不胜感激。谢谢。
最佳答案
我不确定为什么 id 2 和 3 在一起。
这是一个按单个内部字典(具有 id
的字典)分组的版本,
我不确定这是否有帮助,或者您稍后根据哪种逻辑对指令进行分组,如果您帮助我解决这个问题,也许我可以帮助您获得所需的输出:
from itertools import groupby
from pprint import pprint
original = [
{'key1': 'value1', 'key2': [{'id': 1, 'name': 'name1'}, {'id': 2, 'name': 'name2'}, {'id': 3, 'name': 'name3'}]},
{'key1': 'value1', 'key2': [{'id': 1, 'name': 'name1'}, ]},
{'key1': 'value1', 'key2': [{'id': 1, 'name': 'name1'}, ]}
]
keyfunc = lambda x: x['key2'][0]['id']
flattened_and_sorted_by_key2 = sorted([{'key1': d['key1'], 'key2':[inner_d]} for d in original for inner_d in d['key2']], key=keyfunc)
grouped_flattened = [list(x) for _, x in groupby(flattened_and_sorted_by_key2, key=keyfunc)]
pprint(grouped_flattened, indent=2)
这会输出 3 组,每组对应 id
的每个值:
[ [ {'key1': 'value1', 'key2': [{'id': 1, 'name': 'name1'}]},
{'key1': 'value1', 'key2': [{'id': 1, 'name': 'name1'}]},
{'key1': 'value1', 'key2': [{'id': 1, 'name': 'name1'}]}],
[{'key1': 'value1', 'key2': [{'id': 2, 'name': 'name2'}]}],
[{'key1': 'value1', 'key2': [{'id': 3, 'name': 'name3'}]}]]
关于python - 如何在 Python 中对字典列表进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57656247/
我是一名优秀的程序员,十分优秀!