[英]Python update a key in dict if it doesn't exist
如果鍵不在 dict.keys() 中,我想將鍵值對插入到 dict 中。 基本上我可以這樣做:
if key not in d.keys():
d[key] = value
但是有更好的方法嗎? 或者這個問題的pythonic解決方案是什么?
你不需要調用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'}
從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}
注意:這將創建一個包含更新值的新字典。
根據上面的答案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()
我們避免了對字典的額外查找,也就是說,雖然很小,但仍然可以提高性能。
您也可以僅在一行代碼中使用此解決方案:
dict[dict_key] = dict.get(dict_key,value)
dict.get
的第二個參數是在鍵不存在的情況下要分配給鍵的值。 由於這在分配給dict[dict_key] =
之前進行了評估,因此我們可以確定當我們嘗試訪問它們時它們的鍵將存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.