1

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

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

如何获取列出的 dicts 的所有键的列表(意思是 [1, 2])?

4

5 回答 5

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]
于 2013-02-10T15:13:54.037 回答
4

如果你想避免额外的导入,你可以使用列表推导:

>>> l = [{1: 'a'}, {2: 'b'}]
>>> [k for d in l for k in d.keys()]
[1, 2]
于 2013-02-10T15:42:57.457 回答
1

如果您使用以下代码,则无需导入任何内容。

>>> map(lambda x: x.keys()[0], [{1: "a"}, {2: "b"}])
[1, 2]

虽然不干净...

于 2013-02-10T15:33:49.093 回答
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)

上面的列表理解等价物是:

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'}]如果两个字典有两个相同的键(如),这将覆盖其中一个键值对。

于 2013-02-10T15:46:44.813 回答
0

sum((m.keys() for m in l), [])如果你想要一份清单,

set(sum((m.keys() for m in l), []))如果你想要一套。

于 2013-02-10T15:58:01.883 回答