gpt4 book ai didi

python - 将多个基于共同键值的字典合并为一个字典

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:53 25 4
gpt4 key购买 nike

基本上我有一个 OrderedDicts 列表;

lst = [
OrderedDict([('type', 'character'), ('letter', 'a')]),
OrderedDict([('type', 'character'), ('letter', 'b')]),
OrderedDict([('type', 'character'), ('letter', 'c')]),
OrderedDict([('type', 'character'), ('letter', 'd')]),
OrderedDict([('type', 'integer'), ('number', '1')]),
OrderedDict([('type', 'integer'), ('number', '2')]),
OrderedDict([('type', 'integer'), ('number', '3')]),
OrderedDict([('type', 'integer'), ('number', '4')])
]

我想把它改成

lst = [
OrderedDict([('type', 'character'), ('letter', ['a', 'b', 'c', 'd'])]),
OrderedDict([('type', 'integer'), ('number', ['1', '2', '3', '4'])])
]

我想到了一个类型值列表 ['character', 'integer'] 并遍历所有词典以尝试将列表中的字母/数字分组,然后创建一个新的词典列表以填充我得到的数据。不确定这是否是最好的方法

感谢帮助

最佳答案

考虑到您的词典列表已经排序,您可以使用itertools.groupby直接地。字典中项目及其相关字符串之间的映射有助于避免多次调用 d.items 并使代码可扩展为新类型:

from collections import OrderedDict
from itertools import groupby

_map = {'character': 'letter', 'integer': 'number'}

l = [OrderedDict([('type', k), (_map[k], [d[_map[k]] for d in g])]) for k, g in groupby(lst, lambda x: x['type'])]
print(l)
# [OrderedDict([('type', 'character'), ('letter', ['a', 'b', 'c', 'd'])]), OrderedDict([('type', 'integer'), ('number', ['1', '2', '3', '4'])])]

关于python - 将多个基于共同键值的字典合并为一个字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41020621/

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