假设我有一个如下所示的字典列表:
[{1: "a"}, {2: "b"}]
如何获取列出的 dicts 的所有键的列表(意思是 [1, 2])?
您可以使用chain.from_iterable
:
>>> from itertools import chain
>>> l = [{1: "a"}, {2: "b"}]
>>> list(chain.from_iterable(l))
[1, 2]
或者,如果您使用列表推导,您可以跳过.keys()
. 在 python 2.x 中,您还可以避免以这种方式构建不必要的列表:
>>> [k for d in l for k in d]
[1, 2]
如果你想避免额外的导入,你可以使用列表推导:
>>> l = [{1: 'a'}, {2: 'b'}]
>>> [k for d in l for k in d.keys()]
[1, 2]
如果您使用以下代码,则无需导入任何内容。
>>> map(lambda x: x.keys()[0], [{1: "a"}, {2: "b"}])
[1, 2]
虽然不干净...
非常简单的方法(不导入任何东西):
d = [{1: "a"}, {2: "b"}]
keys = [l.keys() for l in d]
但是,这会返回[[1], [2]]
。
为避免这种情况,您可以将其更改为:
d = [{1: "a"}, {2: "b"}]
keys = []
for l in d:
for key in l: # iterating through a dictionary always gives the key
keys.append(key)
上面的列表理解等价物是:
d = [{1: "a"}, {2: "b"}]
keys = [key for l in d for key in l.keys()]
您还可以使用内置d.update(d2)
功能,它结合了字典:
d = [{1: "a"}, {2: "b"}]
new_dict = {}
for l in d: new_dict.update(l)
new_dict.keys()
[{1: 'a'}, {1: 'b'}]
如果两个字典有两个相同的键(如),这将覆盖其中一个键值对。
sum((m.keys() for m in l), [])
如果你想要一份清单,
set(sum((m.keys() for m in l), []))
如果你想要一套。