2016-09-13 6 views
0

私は各値が辞書であるリストを持っています。Pythonで辞書のリストを反復的に更新するにはどうしたらいいですか?

my_list = [{"key_1": "xxx", "key_2": "yyy", "key_3": None,"key_4": "www"}, {"key_1": "aaa", "key_2": "bbb", "key_3": "ccc", "key_4": "eee"}] 

辞書からいくつかのキーバリューペアを削除する必要があります。 key_2の値を更新し、別のキーの値を更新します。これまでのところ、キーを削除して各辞書の値を更新することができましたが、私の問題は更新プログラムをリストに残す方法を見つけることができないことです。

for i in my_list: 
    key_removal = ['key_1','key_4'] 
    i = {key: value for key, value in i.items() if key not in key_removal} 
    if i["key_3"] is not None: 
     i['key_3'] = 'ddd' 

私は、forループこれを行うための素晴らしいではありませんが、辞書は、同じキーを持つように、リストの値を反復処理するために論理的なようであることを読んだことがあります。さらに、リスト自体は辞書の値であり、後でマスターオブジェクトが必要です。私はこれについて全く新しいのでどんな助けも大いに評価されるでしょう。ありがとう。

答えて

0

あなたのコードはほぼ正しいですが、あなたのディクテーションの理解の行では、あなたが通過するディクテーションのコピーにiを割り当てているので、もはやmy_listのディクテーションを指していません。 listとdictの内包表記は常にコピーを返します。代わりに、私は、キーと値のペアを削除するにはdel機能を使用しました:

my_list = [{"key_1": "xxx", "key_2": "yyy", "key_3": None,"key_4": "www"}, {"key_1": "aaa", "key_2": "bbb", "key_3": "ccc", "key_4": "eee"}] 
for i in my_list: 
    key_removal = ['key_1','key_4'] 
    #i = {key: value for key, value in i.items() if key not in key_removal} #<-- this line is producing new dicts, not referencing ones in my_list 

    #Instead loop through the keys to remove and delete that 
    for remove_key in key_removal: 
     del i[remove_key] 
    if i["key_3"] is not None: 
     i['key_3'] = 'ddd' 

print my_list 

出力:

[{'key_3': None, 'key_2': 'yyy'}, {'key_3': 'ddd', 'key_2': 'bbb'}] 
+0

どうもありがとうございました! – coghmeister

関連する問題