我有一个列表,其中每个值都是字典。
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 :(得分: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'}]