基本上我有一个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 – 将基于公共键值的几个词典组合到一个词典中 - 代码日志