[英]How can I update a value in a dictionary in python?
我有一个这样的字典:
my_dict = {key1:value1, key2:value2}
我想首先检查一些密钥是否存在,如果是,我必须将现有密钥的值转换为列表并添加其他值,如下所示:
my_dict = {key1:[value1,new_value], key2:value2}
我的意思是我需要更新字典中的一个键以列出并非所有键。 有什么想法吗?
即使您向某个键添加多个值,这个解决方案仍然有效。 你可以有一个单独的功能:
#!/usr/bin/env python
def append_value(d, key, value):
if not key in d:
d[key] = value
else:
if type(d[key]) != list:
d[key] = [d[key], value]
else:
d[key].append(value)
my_dict = {"key1": 1, "key2": 2}
print(my_dict)
append_value(my_dict, 'key1', 4)
print(my_dict)
append_value(my_dict, 'key1', 5)
print(my_dict)
append_value(my_dict, 'key3', 6) # adding a key that doesn't exist
print(my_dict)
append_value(my_dict, 'key3', 7)
print(my_dict)
输出将是:
{'key2': 2, 'key1': 1} # initial value
{'key2': 2, 'key1': [1, 4]} # adding 4 to key1
{'key2': 2, 'key1': [1, 4, 5]} # adding 5 to key1
{'key3': 6, 'key2': 2, 'key1': [1, 4, 5]} # adding new key: key3
{'key3': [6, 7], 'key2': 2, 'key1': [1, 4, 5]} # adding 7 to key3
如果您可能有一个或多个给定键的值,通常最好始终使用列表作为值,而不是有时使用列表,有时直接使用值。 列表中只能包含一个项目,或者可以包含更多项目。 这样,您始终可以使用相同的代码来访问和修改值,无论它们有多少。
有几种很好的方法可以为这样的字典添加值。 setdefault
方法很简单,适用于常规字典:
d = {"key1": ["value1"], "key2": ["value2"]} # values are always lists
d.setdefault("key1", []).append("new_value") # this adds a value to an existing list
d.setdefault("new_key", []).append("new_value2") # this time the same code creates a new list
您还可以使用collections.defaultdict
,当您查找尚未在字典中的键时,它将自动创建新值。
from collections import defaultdict
d = defaultdict(list) # list is the "factory" that gets called to create new values
d["key1"].append("value1")
d["key2"].append("value2")
d["key1"].append("new_value")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.