python – 将基于公共键值的几个词典组合到一个词典中

基本上我有一个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’]并浏览所有字典以尝试将列表中的字母/数字分组,然后创建一个新的字典列表以填入数据I拿到.不知道这是否是最好的方法

感谢帮助

最佳答案
考虑到您的词典列表已经排序,您可以直接使用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 – 将基于公共键值的几个词典组合到一个词典中 - 代码日志