2013-11-20 35 views
0

我的字典Dict安排如下。每个键与值的列表,其中每个值是一个元组相关联:字典中的和值w /尊重密钥 - Python 2.7

Dict = { 
    'key1': [('Red','Large',30),('Red','Medium',40),('Blue','Small',45)], 
    'key2': [('Red','Large',35)], 
    'key3': [('Yellow','Large',30),('Red','Medium',30)], 
} 

我再要总结赋予了新的关键,颜色在这种情况下,整数(每个元组的索引2)。

产生的新词典应该是这个样子:

{ 
    'key1': [('Red', 70), ('Blue', 45)], 
    'key2': [('Red', 35)], 
    'key3': [('Yellow', 30), ('Red', 30)], 
} 

如何我会做到这一点?

我在想下面的东西,但我知道这在几个方面是错误的。

sum = 0 
new_dict = {} 
new_key = raw_input("Enter a new key to search on: ") 
for k,v in Dict: 
    if v[0] == new_key: 
    sum = sum + v[2] 
    new_dict[k].append(sum) 
    else: 
    sum = 0 
    new_dict[k] = [sum] 
+0

是什么'迪科“这里? – karthikr

+0

抱歉,错字。那应该是字典。我的原始字典。 – brno792

回答

4

使用字典理解,产生新的输出:

{key: [color, sum(t[2] for t in value if t[0] == color)] for key, value in Dict.iteritems()} 

其中color是搜索的关键。

演示:

>>> Dict = { 
...  'key1': [('Red','Large',30),('Red','Medium',40),('Blue','Small',45)], 
...  'key2': [('Red','Large',35)], 
...  'key3': [('Yellow','Large',30),('Red','Medium',30)], 
... } 
>>> color = 'Red' 
>>> {key: [color, sum(t[2] for t in value if t[0] == color)] for key, value in Dict.iteritems()} 
{'key3': ['Red', 30], 'key2': ['Red', 35], 'key1': ['Red', 70]} 

要通过色彩和所有值,使用Counter()来概括值:

from collections import defaultdict, Counter 

new_dict = {} 
for key, values in Dict.iteritems(): 
    counts = Counter() 
    for color, _, count in values: 
     counts[color] += count 
    new_dict[key] = counts.items() 

这给:

>>> new_dict = {} 
>>> for key, values in Dict.iteritems(): 
...  counts = Counter() 
...  for color, _, count in values: 
...   counts[color] += count 
...  new_dict[key] = counts.items() 
... 
>>> new_dict 
{'key3': [('Red', 30), ('Yellow', 30)], 'key2': [('Red', 35)], 'key1': [('Blue', 45), ('Red', 70)]} 
+0

谢谢。这真的有帮助。如果我没有指定颜色,并且只想对给定的键具有相同颜色的所有东西进行求和?请参阅我的编辑以获得预期的结果。 – brno792

+0

@ brno792:第二个元素的输出没有意义;它应该是'[('Red',35)]',一个列表中的元组。 –

+0

对不起,错误地遗漏了元组。现在它是固定的。那么如何在不指定颜色的情况下做到这一点?谢谢 – brno792