2012-10-15 76 views
1

在Python中,我目前有一個帶有組合鍵的字典。在這本字典中有這些密鑰的多個出現。 (鍵是逗號分隔):Python:While Statement = Statement打印相關值

(A,B), (A,C), (A,B), (A,D), (C,A), (A,B), (C,A), (C,B), (C,B) 

我已經擁有的東西,總計獨特的事件和計算,給了我一個打印出類似這樣的重複:

(A,B)4計數,(A,C)2(B,C)6計數的計數等

我想知道如何編寫一個循環,這將使我下面的:

打印鍵的第一部分及其關聯的值和計數的第一次出現。

名稱:A:

Type Count 

B  4 
C  2 

Total 6 

名稱:B:

Type Count 
A 3 
B 2 
C 3 
Total 8 

我知道我需要創建一個循環,其中first statement = the first statement並執行以下操作,但沒有真正的想法如何處理/編碼這個。

+1

你怎麼能有相同的密鑰多次詞典('(A,B)'爲例)? –

+0

它來自一個列表,基本上來自一個巨大的文本文件。我在哪裏必須查找某些值並查找與它們相關的值。對於詞典的多次出現,我發現每次發生的事情基本上都會將值V增加1。如果它沒有找到它的價值,它會創建一個新的價值,並將其設置爲1.對不起,我不清楚。就是說,我基本上增加了原始列表中找到的每個副本的值。詞典是唯一的條目,但每個條目的值V代表原始列表中找到的次數。 – DarkGod

+0

@Alok:我認爲OP的意思是說他有一個包含'(A,B)'等的集合。然後,他使用'collections.Counter'將所述集合處理成一個字典,大概是 – inspectorG4dget

回答

2

這裏有一個稍慢的算法,將完成它:

def convert(myDict): 
    keys = myDict.keys() 
    answer = collections.defaultdict(dict) 
    for key in keys: 
     for k in [k for k in keys if k.startswith(key[0])]: 
      answer[key[0]][k[1]] = myDict[k] 
    return answer 

最終,我認爲你是什麼後trie

0

它有點誤導地說,你的字典有多個給定鍵的值。 Python不允許這樣做。相反,你所擁有的是元組的關鍵。你想解壓這些元組並重建一個嵌套的字典。

以下是我會做:

import collections 

# rebuild data structure 
nested = collections.defaultdict(dict) 
for k, v in myDict.items(): 
    k1, k2 = k    # unpack key tuple 
    nested[k1][k2] = v 

# print out data in the desired format (with totals) 
for k1, inner in nested.items(): 
    print("%s\tType\tCount" % k1) 
    total = 0 
    for k2, v in innner.items(): 
     print("\t%s\t%d" % (k2, v)) 
     total += v 
    print("\tTotal\t%d" % total)