Xia*_*Cui 53 python dictionary
如果key不在dict.keys()中,我想在dict中插入一个键值对.基本上我可以这样做:
if key not in d.keys():
d[key] = value
Run Code Online (Sandbox Code Playgroud)
但有更好的方法吗?或者这个问题的pythonic解决方案是什么?
Mar*_*ers 73
您的语法无效,也不需要调用d.keys().
if key not in d:
d[key] = value
Run Code Online (Sandbox Code Playgroud)
足够.没有更清晰,更易读的方法.
您可以再次更新dict.get(),如果密钥已存在,则会返回现有值:
d[key] = d.get(key, value)
Run Code Online (Sandbox Code Playgroud)
但我强烈建议不要这样做; 这是代码打高尔夫球,妨碍维护和可读性.
mha*_*wke 35
>>> 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'}
Run Code Online (Sandbox Code Playgroud)
Rot*_*eti 34
从Python 3.9 开始,您可以使用合并运算符 |来合并两个字典。右边的 dict 优先:
new_dict = old_dict | { key: val }
Run Code Online (Sandbox Code Playgroud)
例如:
new_dict = { 'a': 1, 'b': 2 } | { 'b': 42 }
print(new_dict} # {'a': 1, 'b': 42}
Run Code Online (Sandbox Code Playgroud)
注意:这会使用更新的值创建一个新字典。
小智 15
您还可以仅在一行代码中使用此解决方案:
dict[dict_key] = dict.get(dict_key,value)
Run Code Online (Sandbox Code Playgroud)
的第二个参数dict.get是您要分配给该键的值,以防该键不存在。由于它在分配给 之前进行评估dict[dict_key] = ,因此我们可以确定当我们尝试访问它时它们的键将存在。
小智 8
使用以下内容,您可以插入多个值并具有默认值,但您正在创建一个新字典。
d = {**{ key: value }, **default_values}
Run Code Online (Sandbox Code Playgroud)
我已经用投票最多的答案对其进行了测试,平均而言,速度更快,如下例所示。
速度测试将基于 for 循环的方法与具有解包运算符方法的 dict 理解进行比较。
如果d = default_vals.copy()在第一个案例中没有复制 ( ) ,那么一旦我们达到10**5和更大的数量级,投票最多的答案就会更快。两种方法的内存占用是相同的。