python 如何用键初始化defaultdict?

9vw9lbht  于 2023-02-07  发布在  Python
关注(0)|答案(6)|浏览(121)

我有一个列表字典,它应该用默认键初始化。我猜,下面的代码不太好(我的意思是,它工作,但我不觉得它是用Python的方式写的):

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

所以我想用一些更像Python的东西,比如defaultict

d = defaultdict(list)

然而,我看过的每一个教程都是动态设置新键的,但在我的例子中,所有键都应该从一开始就定义好,我正在解析其他数据结构,只有当结构中的特定键也包含在我的字典中时,我才向字典中添加值。
如何设置默认密钥?

brvekthn

brvekthn1#

从评论中,我假设你想要一个符合以下条件的字典:
1.初始化为一组键,每个键的列表值为空
1.具有defaultdict行为,可以为不存在的键初始化空列表
@Aaron_lab的方法是对的,但还有一种稍微干净一点的方法:

d = defaultdict(list,{ k:[] for k in ('a','b','c') })
pod7payv

pod7payv2#

这已经很合理了,但是您可以通过使用标准键列表的dict解析来缩短时间。

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

rqcrx0a63#

如果你要预初始化空列表,就不需要 defaultdict,简单的指令解析就能清晰干净地完成任务:

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

sdnqo3pr4#

如果你知道你会使用一组相近的键(在你的例子中是['a ',' b','c']),你肯定可以使用上面的答案。
但是...
dd = defaultdict(list)为您提供更多功能:d = {'a':[], 'b':[], 'c':[]}。您可以将append设置为defaultdict中的"不存在"键:

>>dd['d'].append(5)
>>dd
>>defaultdict(list, {'d': 5})

如果您这样做:

>>d['d'].append(5)  # you'll face KeyError
>>KeyError: 'd'

建议采取以下措施:

>>d = {'a' : [], 'b' : [], 'c' : []}
>>default_d = defaultdict(list, **d)

现在你有了一条法令,上面有三把钥匙:['a ',' b ',' c ']和空列表作为值,您也可以将其附加到其他键,而无需显式地编写:追加前的d['new_key'] = []

4jb9z9bj

4jb9z9bj5#

您可以定义一个函数,该函数将返回带有预设键的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(关键字=[“a”,“e”,“i”,“o”,“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]}

mdfafbf1

mdfafbf16#

from collections import defaultdict
list(map((data := defaultdict(list)).__getitem__, 'abcde'))
data

输出[3]:默认命令(列表,{'a ':[]、"b":[]、"c":[]、"d":[]、"e":[]})

相关问题