gpt4 book ai didi

python - 如何在 Python 中对字典列表进行分组?

转载 作者:太空狗 更新时间:2023-10-30 01:10:47 26 4
gpt4 key购买 nike

我是 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com