如何迭代更新python中的字典列表?

时间:2016-09-13 21:07:50

标签: python-2.7 dictionary

我有一个列表,其中每个值都是字典。

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循环对于这样做并不好,但由于字典具有相同的键,因此迭代列表的值似乎是合乎逻辑的。此外,列表本身是字典中的值,稍后我需要主对象。任何帮助都会非常感激,因为我对此很陌生。感谢。

1 个答案:

答案 0 :(得分:0)

您的代码几乎是正确的,但是在您的字典理解行中,您将i指定为您所经历的字典的副本,因此它不再指向my_list中的字典。列表和字典理解总是返回一份副本。相反,我使用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'}]