2013-11-20 68 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