簡體   English   中英

創建默認值可變或可變的字典的功能

[英]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.

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