[英]Function to create dictionary with default values that can be either immutable or mutable
我有一個用特定鍵創建字典的函數,該函數接受一個參數來指定每個鍵的“默認”值。
def new_dict(entrys_default=0):
my_dict = {}
for k in ['a', 'b', 'c']:
my_dict[k] = entrys_default
return my_dict
問題是,當我使用new_dict(entrys_default=[])
調用時,將創建一個新的空列表作為其值來創建字典中的每個條目,然后再使用new_dict(entrys_default=[])
returned_dict['a'].append(123)
然后更新所有條目:
{'a': [123], 'b': [123], 'c': [123]}
使用整數時不會發生這種情況,我知道這是因為entrys_default
是整數時是不可變的,但是當它是列表或字典時是對同一列表的引用。
我希望能夠使此函數的工作方式與對帶有lists和entrys_default
列表和字典的整數參數entrys_default
(即,每個條目都有自己的列表/字典),但希望保持該函數的靈活性,使其也適用於整數。
誰能建議最好的方法嗎?
做collections.defaultdict
工作; 而不是采用“示例”默認值,而是采用返回所需默認值的函數。 然后調用該函數並使用其返回值初始化正在構建的dict
每個元素。
def new_dict(make_default=int): # int() == 0
my_dict = {}
for k in ['a', 'b', 'c']:
my_dict[k] = make_default()
return my_dict
d = new_dict(list) # list() == [], but a distinct list each time it is called
d['a'].append(123)
assert d['a'] != d['b']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.