将英文标题翻译成中文,不包括特殊字符或引号:“将字典分成嵌套字典,基于 Python 3.4 中键的名称”

2024-09-28 18:57:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下字典(简体版本,真实数据要大得多):

dict = {'C-STD-B&M-SUM:-1': 0, 'C-STD-B&M-SUM:-10': 4.520475, 'H-NSW-BAC-ART:-9': 0.33784000000000003, 'H-NSW-BAC-ART:0': 0, 'H-NSW-BAC-ENG:-59': 0.020309999999999998, 'H-NSW-BAC-ENG:-6': 0,}

我想根据键名的一部分将其划分为更小的嵌套字典。在

预期产出为:

^{pr2}$

背后的逻辑是:

^{3}$

目前部分代码:

def divide_dictionaries(dict):
    c_std_bem_sum = {}
    for k, v in dict.items():
        if k[0:13] == 'C-STD-B&M-SUM':
            c_std_bem_sum = k[14:17], v

我要做的是创建我需要的嵌套词典,然后创建并添加嵌套词典,但我不确定这是否是一个好方法。在

当我运行上面的代码时,变量c_std_bem_sum变成一个元组,每次迭代只改变两个值。如何使它成为一个字典,以便以后可以创建另一个字典,并将此字典用作其中一个键的值?在


Tags: 数据代码字典engdict词典stdsum
2条回答

这是因为您正在设置字典并用元组覆盖它:

>>> a = 1, 2
>>> print a
>>> (1,2)

现在举个例子:

^{pr2}$

基本上,它获取其余的键(或者3个字符,如您所知,[14:None]或[14:]将获得字符串的其余部分),然后将其用作dict的新键

一种方法是

d = {'C-STD-B&M-SUM:-1': 0, 'C-STD-B&M-SUM:-10': 4.520475, 'H-NSW-BAC-ART:-9': 0.33784000000000003, 'H-NSW-BAC-ART:0': 0, 'H-NSW-BAC-ENG:-59': 0.020309999999999998, 'H-NSW-BAC-ENG:-6': 0,}

def divide_dictionaries(somedict):
    out = {}
    for k,v in somedict.items():
        head, tail = k.split(":")
        subdict = out.setdefault(head, {})
        subdict[tail] = v
    return out

这给了

^{pr2}$

一些注意事项:

(1)我们使用嵌套词典,而不是创建单独的命名词典,这不方便。在

(2)我们使用了setdefault,这是一种方便的方法,可以说“在字典中给我一个值,但是如果没有值,则将其添加到字典中并返回它。”。保存if。在

(3)我们可以使用.split(":")而不是硬编码宽度,至少假设这是分隔符,这不是很健壮!在

(4)使用dict(内置类型的名称)作为变量名是个坏主意。在

相关问题 更多 >