2013-07-13 29 views
1

我有一個字典,元組爲核心,如:的Python:以元組爲重點排序字典的價值

d={('w1','u1'):3,('w1','u2'):8,('w2','u1'):1,('w1','u3'):11,('w2','u3'):6} 

現在我想收集所有項目的每個「W」,即第一個元素在按鍵:

'w1' : ('w1','u1'):3 ('w1','u2'):8 ('w1','u3'):11 ------- 
'w2' : ('w2','u1'):1 ('w2','u3'):6 

然後由值排序每一行獲得:

'w1' : 'u3':11 'u2':8 'u1':3 ------- 
'w2' : 'u3':6 'u1':1 

任何人可以給我一些暗示辦呢?謝謝

+0

由 「收集」 你的意思是創建一個嵌套的字典嗎?即'w1':{('w1','u1'):3,('w1','u2'):8,...}'?按照他們的方式:我沒有看到在嵌套字典中保留「w1」的原因。做'w1':{'u1':3,'u2':8,...}給出完全相同的信息。 – Bakuriu

回答

2

這給你想要的東西,整理。但最終不在字典中,因爲你無法對字典進行排序。

d={('w1','u1'):3,('w1','u2'):8,('w2','u1'):1,('w1','u3'):11,('w2','u3'):6} 

d2 = {} 

for (w,u) , value in d.items(): 
    if w not in d2: 
     d2[w] = [(u,value)] 
    else: 
     d2[w].append((u, value)) 


for key, values in d2.items(): 
    print key, ":\t", sorted(values, key=lambda x: -x[1]), "\n" 

這給:

w2 : [('u3', 6), ('u1', 1)] 

w1 : [('u3', 11), ('u2', 8), ('u1', 3)] 
2

鑑於最後的dict你後,在我看來你不需要排序。只需通過鍵值對迭代,並把它們重新組合成一個新的字典:

d = {('w1', 'u1'): 3, ('w1', 'u2'): 8, ('w2', 'u1'): 1, ('w1', 'u3'): 11, 
    ('w2', 'u3'): 6} 
result = {} 
for (w, u), val in d.iteritems(): 
    result.setdefault(w, {})[u] = val 
print(result) 

產生

{'w2': {'u1': 1, 'u3': 6}, 'w1': {'u1': 3, 'u3': 11, 'u2': 8}}