次のような辞書のリストがあるとします。
[{1: "a"}, {2: "b"}]
リストされた辞書 ([1, 2] を意味する) のすべてのキーのリストを取得するにはどうすればよいですか?
次のような辞書のリストがあるとします。
[{1: "a"}, {2: "b"}]
リストされた辞書 ([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]
非常に簡単な方法 (何もインポートしない):
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'}]
。
次のコードを使用する場合、何かをインポートする必要はありません。
>>> map(lambda x: x.keys()[0], [{1: "a"}, {2: "b"}])
[1, 2]
きれいじゃないのに…
sum((m.keys() for m in l), [])
リストが欲しい場合は、
set(sum((m.keys() for m in l), []))
セットをご希望の場合。