如何用键初始化defaultdict?

问题描述:

我有一个列表字典,它应该使用默认键进行初始化。我想,下面的代码是不好的(我的意思是,它的工作原理,但我不觉得这是写在Python的方式):如何用键初始化defaultdict?

d = {'a' : [], 'b' : [], 'c' : []} 

所以我想用的东西更Python一样defaultict

d = defaultdict(list) 

但是,我看到的每个教程都会动态设置新密钥。但在我的情况下,所有的键都应该从头开始定义。我正在解析其他数据结构,并且只有当结构中的特定键也包含在我的字典中时,才会将值添加到我的字典中。

如何设置默认键?

+0

你想附加键自动创建后或你有全套从一开始? – tdelaney

+2

如果您使用的是defaultdict,您为什么需要设置密钥?你想要什么样的行为,这个数据结构的用例是什么? – jonrsharpe

+0

@tdelaney我想要从头开始全套。 – Amir

这已经很合理了,但是可以缩短一点,使用标准的键列表来理解词典。

>>> standard_keys = ['a', 'b', 'c'] 
>>> d1 = {key:[] for key in standard_keys} 
>>> d2 = {key:[] for key in standard_keys} 
>>> ... 

如果你要预先初始化为空列表,没有必要对defaultdict。简单的字典,理解变得清晰简洁地完成工作:

>>> {k : [] for k in ['a', 'b', 'c']} 
{'a': [], 'b': [], 'c': []} 

您可以定义将返回你dict预设键的功能。

def get_preset_dict(keys=['a','b','c'],values=None): 
    d = {} 
    if not values: 
     values = [[]]*len(keys) 
    if len(keys)!=len(values): 
     raise Exception('unequal lenghts') 
    for index,key in enumerate(keys): 
     d[key] = values[index] 

    return d 

在[8]:get_preset_dict()

缺货[8]:{'a': [], 'b': [], 'c': []}

在[18]:get_preset_dict(键= [ '一个', 'E',” I”, '0', 'U'])

缺货[18]:{'a': [], 'e': [], 'i': [], 'o': [], 'u': []}

在[19]: get_preset_dict(keys=['a','e','i','o','u'],values=[[1],[2,2,2],[3],[4,2],[5]])

出[19]:{'a': [1], 'e': [2, 2, 2], 'i': [3], 'o': [4, 2], 'u': [5]}