【发布时间】:2017-07-07 23:47:55
【问题描述】:
如果键不在 dict.keys() 中,我想在 dict 中插入一个键值对。 基本上我可以这样做:
if key not in d.keys():
d[key] = value
但是有更好的方法吗?或者这个问题的pythonic解决方案是什么?
【问题讨论】:
标签: python dictionary
如果键不在 dict.keys() 中,我想在 dict 中插入一个键值对。 基本上我可以这样做:
if key not in d.keys():
d[key] = value
但是有更好的方法吗?或者这个问题的pythonic解决方案是什么?
【问题讨论】:
标签: python dictionary
你不需要打电话给d.keys(),所以
if key not in d:
d[key] = value
就够了。没有比这更清晰、更易读的方法了。
您可以使用dict.get() 再次更新,如果密钥已经存在,它将返回一个现有值:
d[key] = d.get(key, value)
但我强烈建议不要这样做;这是代码打高尔夫球,妨碍维护和可读性。
【讨论】:
>>> d = {'key1': 'one'}
>>> d.setdefault('key1', 'some-unused-value')
'one'
>>> d # d has not changed because the key already existed
{'key1': 'one'}
>>> d.setdefault('key2', 'two')
'two'
>>> d
{'key1': 'one', 'key2': 'two'}
【讨论】:
dict.setdefault() 应该只在尝试访问该值时使用。
setdefault() 这个名字清楚地描述了正在发生的事情——它也返回一个值并不是那么重要,而且有点古怪的 IMO。您能否提供一个快速解释或链接,说明为什么这是不可取的?
for obj in iterable: d.setdefault(key_for_obj(obj), []).append(obj)。返回的值没有什么奇怪的,这就是方法的重点。
if key not in d: 测试。
setdefault() 似乎确实适合您所说的内容。使用 defaultdict(list) 会产生比您的示例更具可读性的代码......所以除非必须使用标准字典,否则它可能没有用处。总的来说,if key not in d 更清晰。
从 Python 3.9 开始,您可以使用 合并运算符 | 合并两个字典。右边的dict优先:
new_dict = old_dict | { key: val }
例如:
new_dict = { 'a': 1, 'b': 2 } | { 'b': 42 }
print(new_dict) # {'a': 1, 'b': 42}
注意:这会创建一个包含更新值的新字典。
【讨论】:
{ 'a': 1, 'b': 2 }因为'b' in old_dict 已经。所以你必须把其他字典放在第一位{ key: val } | old_dict。
【讨论】:
{**default_values, **{ key: value }}