如何获取列表中所有键的键列表?

时间:2013-02-10 15:06:21

标签: python python-2.7

假设我有一个如下所示的词典列表:

[{1: "a"}, {2: "b"}]

如何获得所列词典的所有键列表(含义[1,2])?

5 个答案:

答案 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), []))如果你想要一套。