Python:添加字典值以形成新的元组键控字典

siv*_*iva 0 python dictionary

如果我有一个字典如下(有一些列表):

units = ['a','b']
nums = ['1','2']
ratios = ['alpha', 'beta']

d = {'a_1_alpha':4, 'a_1_beta' :1, 'a_2_alpha' :2, 'a_2_beta': 3, 'b_1_alpha':2}
Run Code Online (Sandbox Code Playgroud)

我如何从一本新词典:

  • 形成一个键,包括来自列表nums和比率的元组(num,ratio)#items
  • 该值将是早期字典(d)值的总和.

new_d = { ('1','alpha'): 6, ('1','beta'): 1, ('2','alpha'): 2, ('2','beta'): 3}
Run Code Online (Sandbox Code Playgroud)

我有以下代码,但似乎不对.

new_d = {}
for num in nums:
    for ratio in ratios:
        for k,v in d.items():
            if ratio in k:
                try:
                    oldval = dict[num,ratio]
                except:
                    oldval = 0
                new_d[(num,ratio)] = oldval + v

for p,q in new_d.items():
    print p,q
Run Code Online (Sandbox Code Playgroud)

请帮助评论/建议.谢谢 :).

Bol*_*olo 6

两个外部循环是冗余的,只是遍历键值对d.您可以使用轻松提取密钥的三个组件split().这是代码:

new_d = {}
for k, v in d.items():
   u, n, r = k.split('_')
   new_d[(n, r)] = v + new_d.get((n, r), 0)
Run Code Online (Sandbox Code Playgroud)