假设我有一个如下所示的词典列表:
[{1: "a"}, {2: "b"}]
如何获得所列词典的所有键列表(含义[1,2])?
答案 0 :(得分:8)
您可以使用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]
答案 1 :(得分:4)
如果您想避免额外导入,可以使用列表解析:
>>> l = [{1: 'a'}, {2: 'b'}]
>>> [k for d in l for k in d.keys()]
[1, 2]
答案 2 :(得分:1)
如果您使用以下代码,则无需导入任何内容。
>>> map(lambda x: x.keys()[0], [{1: "a"}, {2: "b"}])
[1, 2]
虽然它不干净......
答案 3 :(得分:1)
非常简单的方法(不导入任何东西):
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)
上述list-comprehension相当于:
d = [{1: "a"}, {2: "b"}]
keys = [key for l in d for key in l.keys()]
您还可以使用结合词典的built-in d.update(d2)
feature:
d = [{1: "a"}, {2: "b"}]
new_dict = {}
for l in d: new_dict.update(l)
new_dict.keys()
如果两个词典具有两个相同的键(如[{1: 'a'}, {1: 'b'}]
),则会覆盖其中一个键值对。
答案 4 :(得分:0)
sum((m.keys() for m in l), [])
如果你想要一个清单,
set(sum((m.keys() for m in l), []))
如果你想要一套。