Python:添加字典值以形成新的tuplekeyed字典

2024-09-28 21:51:24 发布

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

如果我有一本如下所示的字典(包括一些列表):

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}

如何从一本新字典中找到:

  • 形成一个由tuple(num,ratio)#个list nums&ratios项组成的键
  • 该值将是先前字典(d)值的总和。在

^{pr2}$

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

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

请帮忙评论/建议。 谢谢:)。在


Tags: inalpha列表newfor字典itemsnum
3条回答

这样可以解决您的问题:

new_d = {}
for n in nums:
    for r in ratios:
        for k, v in d.items():
            if r in k and n in k:
                try:
                    old = new_d[(n, r)]
                except:
                    old = 0
                new_d[(n, r)] = v + old

for p, q in new_d.items():
    print (p, q)

顺便说一句,在确定密钥是否可行时,您还忘了检查n in k。在

两个外部循环是冗余的,只需迭代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)

或使用collections模块:

d = {'a_1_alpha':4, 'a_1_beta' :1, 'a_2_alpha' :2, 'a_2_beta': 3, 'b_1_alpha':2}

from collections import defaultdict

new_d = defaultdict(int)

for k,v in ((tuple(k.split('_')[1:]),v) for k,v in d.iteritems()):
    new_d[k] += v

相关问题 更多 >