问题:如果不存在,Python将更新dict中的键
如果键不在dict.keys()中,我想将一个键值对插入dict中。基本上我可以做到:
if key not in d.keys():
d[key] = value
但是有更好的方法吗?或针对此问题的pythonic解决方案是什么?
回答 0
您无需调用d.keys()
,因此
if key not in d:
d[key] = value
足够的。没有更清晰,更易读的方法。
您可以使用再次更新dict.get()
,如果键已经存在,它将返回一个现有值:
d[key] = d.get(key, value)
但我强烈建议您反对;这是代码打高尔夫球,妨碍了维护和可读性。
回答 1
>>> d = {1: 'one'}
>>> d.setdefault(1, '1')
'one'
>>> d # d has not changed because the key already existed
{1: 'one'}
>>> d.setdefault(2, 'two')
'two'
>>> d
{1: 'one', 2: 'two'}
回答 2
从Python 3.9开始,您可以使用merge运算 |
符合并两个字典。右侧的dict优先:
new_dict = old_dict | { key: val }
例如:
new_dict = { 'a': 1, 'b': 2 } | { 'b': 42 }
print(new_dict} # {'a': 1, 'b': 42}
注意:这将创建具有更新值的新字典。
回答 3
回答 4
根据以上答案,setdefault()方法为我工作。
old_attr_name = mydict.setdefault(key, attr_name)
if attr_name != old_attr_name:
raise RuntimeError(f"Key '{key}' duplication: "
f"'{old_attr_name}' and '{attr_name}'.")
虽然此解决方案不是通用的。在这种情况下才适合我。确切的解决方案是检查第key
一个(如已经建议的),但是setdefault()
我们避免在字典上进行额外的查找,即虽然很小,但仍然可以提高性能。