簡體   English   中英

如何使用默認字典更新python字典:另一個字典中給出的值對

[英]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_dictpop或其他方法是安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM