如果key不在dict.keys()中,我想在dict中插入一个键值对。 基本上我可以用:
if key not in d.keys():
d[key] = value
但是有更好的方法吗?或者这个问题的pythonic解决方案是什么?
答案 0 :(得分:47)
您无需致电d.keys()
,所以
if key not in d:
d[key] = value
就够了。没有更清晰,更易读的方法。
您可以使用dict.get()
再次更新,如果密钥已存在,则会返回现有值:
d[key] = d.get(key, value)
但我强烈建议不要这样做;这是代码打高尔夫球,妨碍维护和可读性。
答案 1 :(得分:26)
>>> 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 :(得分:24)
自 Python 3.9 起,您可以使用 merge运算符 \r
合并两个字典。右侧的dict优先:
|
注意:这将使用更新后的值创建一个新字典。
答案 3 :(得分:6)
使用以下命令,您可以插入多个值,也可以使用默认值,但是您正在创建新字典。
d = {**{ key: value }, **default_values}
我用投票率最高的答案对其进行了测试,平均而言,这样做的速度更快,如下面的示例所示。
速度测试,将基于for循环的方法与带有unpack运算符方法的dict理解进行比较。
如果在第一种情况下没有复制(d = default_vals.copy()
),则一旦我们达到10**5
甚至更大的数量级,投票最多的答案就会更快。两种方法的内存占用都相同。
答案 4 :(得分:0)
根据以上答案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()
我们可以避免在字典上进行额外的查找,尽管它很小,但仍然可以提高性能。 / p>