辞書のリストがあり、このリストの各要素にキーを追加したい。私は試した:
result = [ item.update({"elem":"value"}) for item in mylist ]
しかし、更新メソッドはNoneを返すため、結果リストにはNoneがいっぱいです。
result = [ item["elem"]="value" for item in mylist ]
構文エラーを返します。
更新された辞書への参照は古い辞書への参照と同じであるため、新しい辞書のリストを作成することを心配する必要はありません。
for item in mylist:
item.update( {"elem":"value"})
リストの内包表記を使用したい場合は、ここに素晴らしい答えがあります: https://stackoverflow.com/a/3197365/4403872
あなたの場合、次のようになります。
result = [dict(item, **{'elem':'value'}) for item in myList]
例:
myList = [{'a': 'A'}, {'b': 'B'}, {'c': 'C', 'cc': 'CC'}]
次に、いずれかを使用します
result = [dict(item, **{'elem':'value'}) for item in myList]
または
result = [dict(item, elem='value') for item in myList]
最後に、
>>> result
[{'a': 'A', 'elem': 'value'},
{'b': 'B', 'elem': 'value'},
{'c': 'C', 'cc': 'CC', 'elem': 'value'}]
マップを使用できます。
result = map(lambda item: dict(item, elem='value'), myList)
すでに要素のリストがある場合は、次のことができます。
#elements = ['value'] * len(myList)
result = map(lambda item: dict(item[0], elem=item[1]),Zip(myList,elements))
その後、結果があります
@ vk1011の答えは適切であり、スプレッド演算子で簡潔に拡張でき、新しい辞書オブジェクトは追加の利点です
既存のキーの値を新しいもので上書きするには、新しいアイテムの前にスプレッド演算子を配置できます
result = [{**item, 'elem':'value'} for item in myList]
新しいエントリの値を既存の値で上書きするには、新しいアイテムの後にスプレッド演算子を使用します
result = [{'elem':'value', **item} for item in myList]
両方のメソッドは、新しいアイテムを含む辞書オブジェクトのリストを提供します
>>> a = [ { 1:1 }, {2:2}, {3:3} ]
>>> for item in a:
... item.update( { "test": "test" } )
...
>>> a
[{'test': 'test', 1: 1}, {'test': 'test', 2: 2}, {'test': 'test', 3: 3}]
リストの内包表記を誤って使用しています。item.update
はNone
値を返すため、新しく作成されたリストは、予想されるNone
値ではなく、dict
値でいっぱいになります。
リストにはdict
値への参照が保持されるため、リスト内のアイテムをループして、それぞれを適宜更新するだけで済みます。
リスト内包表記を使用しないか、元のdictと新しいキーに基づいてnew dictを返します。
[dict(list(item.items()) + [("elem", "value")]) for item in mylist]