我认为这应该很简单,但无法找到简单而优雅的解决方案。 我有这个:
l = [{1: 1, 2: 2},
{'a': 'a', 'b': 'b'}]
我想要这个:
l = [((1, 1), ('a', 'a')),
((2, 2), ('b', 'b'))]
如何将列表中多个dicts的项目压缩在一起?
答案 0 :(得分:1)
在Python 3中,dict.items
返回dict_items
个对象。为了防止这种情况,您可以通过执行以下操作将它们全部转换为元组:
list(zip(*map(dict.items, l)))
zip(*<iterable>)
将迭代扩展为zip
的参数,然后zip
将参数压缩为元组(有效地将所有值转换为元组)。
然而,这在过程中非常冗余地构建了多个列表。这可以通过以下方式避免:
list(map((lambda d: tuple(d.items())), l))
# Or with multiple maps:
list(map(tuple, map(dict.items, l))))
可以说,这更直观,但确实使用lambda
或多个地图,因此对于较小的字典列表效率较低。
在Python 2中,dict.items
会返回list
。如果你没有特别需要列表上的元组,那么将它们保存为列表就可以了,map(dict.items, l)
就足够了。
在这里,您可以执行与上述相同的操作(省略list(...)
,因为zip
会返回一个列表:
zip(*map(dict.items, l))
您也可以简单地映射tuple
。
map(tuple, map(dict.items, l))
# Or with a lambda:
map((lambda d: tuple(d.items())), l)