[英]How to update a python dict with default key:value pairs given in another dict
假設字典中存在某些鍵。 如果缺少這些特定鍵和默認值,是否有一種簡單的方法?
例如:
default_dict = {'name': '', 'height': 100, 'age': 20}
d = {'name': 'James', 'age': 65}
d.set_defaults(default_dict)
會將字典d
更新為
{'name': 'James', 'age': 65, 'height': 100}
保留d
的原始值,僅添加缺少的鍵。
default_dict
不應在此過程中銷毀。
創建默認值的副本,並使用d
更新它; 如果d
中的所有鍵都是字符串,則可以通過一個dict()
調用來實現:
d = dict(default_dict, **d)
對於帶有非字符串鍵的字典,您可以使用兩個步驟:
d = default_dict.copy()
d.update({'name': 'James', 'age': 65})
或者您可以使用循環使用字典視圖中不存在的任何鍵更新d
; 但這不是那么快:
d = {'name': 'James', 'age': 65}
d.update((k, default_dict[v]) for k in default_dict.viewkeys() - d)
用Python 3中的keys
替換viewkeys
。
如果您使用的是Python 3.5或更高版本,則可以使用類似的語法來創建新字典:
d = {**default_dict, 'name': 'James', 'age': 65}
首先應用default_dict
的鍵值對,然后再應用您設置的任何新鍵; 這些將覆蓋舊的。 請參閱3.5新增功能文檔中的PEP 448-其他拆包概述 。
任何創建新詞典的方法都可以通過包裝dict.update()
調用來更新現有詞典。 所以第一個可以用以下方法就地更新d
:
d.update(dict(default_dict, **d))
要更新現有字典,我可以使用字典的setdefault
方法:
for key, value in dict_of_defaults.items():
dict_maybe_without_defaults.setdefault(key, value)
如果要創建一個新的字典,其中只有少量的鍵,那么我可能會按照Martijn發布的解決方案進行更多操作。
您可以考慮使用collections.ChainMap
關聯后備:
import collections
default_dict = {'name': '', 'height': 100, 'age': 20}
d = collections.ChainMap({'name': 'James', 'age': 65},default_dict)
>>> d
ChainMap({'name': 'James', 'age': 65}, {'name': '', 'height': 100, 'age': 20})
>>> dict(d) #this flattens the map but isn't necessary for it to work
{'name': 'James', 'height': 100, 'age': 65}
另請注意,由於所有變異方法只會修改第一個映射,因此default_dict
對pop
或其他方法是安全的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.