我有一个单子,上面有字典
[{'x': 42}, {'x': 23, 'y': 5}]
并且要确保所有dict都有相同的键,如果原来的dict中不存在该键,则值为None
,因此上面的列表应该变成
什么是最美丽和Python式的方式来做这件事?当前方法:
keys = reduce(lambda k, l: k.union(set(l)), [d.keys() for d in my_list], set())
new_list = [dict.fromkeys(keys, None) for i in xrange(len(my_list))]
for i, l in enumerate(my_list):
new_list[i].update(l)
但尤其是前两行似乎有点笨拙。思想?在
最简单的方法是:
给我们:
^{pr2}$我们从所有字典中的所有键创建一个集合,然后循环使用
dict
更新它们没有的值。在使用},尽管我觉得这不太可读。在
itertools.chain.from_iterable()
的另一种方法是使用reduce(or_, [dict.keys() for dict in dicts])
(在3.x中,是2.x中的reduce()
和{如果要创建新列表,而不是更新旧列表,只需将for循环替换为:
^{3}$这将创建一个新的字典列表,所有字典都具有完整的键:
相关问题 更多 >
编程相关推荐