gpt4 book ai didi

python - 字典中的组列表项

转载 作者:太空狗 更新时间:2023-10-29 17:40:43 27 4
gpt4 key购买 nike

我想从一个字典列表中生成一个字典,根据某个键的值对列表项进行分组,例如:

input_list = [
{'a':'tata', 'b': 'foo'},
{'a':'pipo', 'b': 'titi'},
{'a':'pipo', 'b': 'toto'},
{'a':'tata', 'b': 'bar'}
]
output_dict = {
'pipo': [
{'a': 'pipo', 'b': 'titi'},
{'a': 'pipo', 'b': 'toto'}
],
'tata': [
{'a': 'tata', 'b': 'foo'},
{'a': 'tata', 'b': 'bar'}
]
}

到目前为止,我已经找到了两种方法。第一个简单地遍历列表,在字典中为每个键值创建子列表,并将与这些键匹配的元素附加到子列表:

l = [ 
{'a':'tata', 'b': 'foo'},
{'a':'pipo', 'b': 'titi'},
{'a':'pipo', 'b': 'toto'},
{'a':'tata', 'b': 'bar'}
]

res = {}

for e in l:
res[e['a']] = res.get(e['a'], [])
res[e['a']].append(e)

另一个使用 itertools.groupby:

import itertools
from operator import itemgetter

l = [
{'a':'tata', 'b': 'foo'},
{'a':'pipo', 'b': 'titi'},
{'a':'pipo', 'b': 'toto'},
{'a':'tata', 'b': 'bar'}
]

l = sorted(l, key=itemgetter('a'))
res = dict((k, list(g)) for k, g in itertools.groupby(l, key=itemgetter('a')))

我想知道哪种替代方案最有效?

是否有更多 pythonic/简洁或性能更好的方法来实现这一点?

最佳答案

您希望根据列表元素的“a”键的值对输入列表进行分组是否正确?如果是这样,您的第一种方法是最好的,一个小的改进,使用 dict.setdefault :

res = {}
for item in l:
res.setdefault(item['a'], []).append(item)

关于python - 字典中的组列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31071888/

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