1

次のような辞書のリストがあるとします。

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

リストされた辞書 ([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

非常に簡単な方法 (何もインポートしない):

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()

2 つの辞書に同じキー ( など) が 2 つある場合、キーと値のペアの 1 つが上書きされます[{1: 'a'}, {1: 'b'}]

于 2013-02-10T15:46:44.813 に答える
1

次のコードを使用する場合、何かをインポートする必要はありません。

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

きれいじゃないのに…

于 2013-02-10T15:33:49.093 に答える
0

sum((m.keys() for m in l), [])リストが欲しい場合は、

set(sum((m.keys() for m in l), []))セットをご希望の場合。

于 2013-02-10T15:58:01.883 に答える