2017-04-19 31 views
0

我有一個表格,其中的數字表示類似於字母表類似名稱的分數。例如,在第一個列表中,X分數爲1,Y分數爲1.從表格中計算類似的元素

L = [['X','Y','1','1'],['C','A','1','2'],['X','Z','2','2']] 

我的目標是在兩個團隊之間找到類似的結果。例如,X在第一個列表中繪製了Y,第三個繪製了X。這使我的輸出:

X: 2 (because X has 2 games of draw) 
Y: 1 (because Y has 1 game of draw) 
C: 0 
A: 0 
Z: 1 (because Z has 1 game of draw) 

這是我已經試過:

L = [['X','Y','1','1'],['C','A','1','2'],['X','Z','2','2']] 
dct = {} 

for i in L: 

    dct[i[0]] = int(i[2]) 
    dct[i[1]] = int(i[3]) 

    if int(i[2]) == int(i[3]): 
     dct[i[0]] += 0 
     dct[i[1]] += 0 
    else: 
     dct[i[0]] = 0 
     dct[i[1]] = 0 

for i, occurences in dct.items(): 
    print(i, ':', occurrences) 

這回我:

X:2 
Y:1 
C:0 
A:0 
Z:2 (wasn't supposed to be 2 but 1) 

我的錯誤可能是在第6和第7行或者也許我的概念是錯誤的。任何幫助深表感謝。

+0

我我不確定我是否遵循了代碼中的邏輯。 「dct」將會是他們的平局總數,對吧?對於列表中的每一個'遊戲結果',你都將'dct'的內容設置爲他們的分數,如果它是一個畫加'0',如果它不是一個畫,把它設置爲'0',所以你'根本不計算抽獎 –

+0

在複製粘貼過程中,您的if/else條件是否位於for循環或其縮進問題中? – DineshKumar

回答

1

你開始指定的號碼在

dct[i[0]] = int(i[2]) 
dct[i[1]] = int(i[3]) 

你應該初始化那些0與平局的比分平 - 如果該鍵i[0]i[1])是不是在dct呢。

蟒蛇提供了一個很好的Counter class這種事情:

from collections import Counter 

score = Counter() 

L = [['X','Y','1','1'],['C','A','1','2'],['X','Z','2','2']] 

for lst in L: 
    if lst[2] == lst[3]: 
     score[lst[0]] += 1 
     score[lst[1]] += 1 

    # make sure we also have the zero scores 
    else: 
     if lst[0] not in score: 
      score[lst[0]] = 0 
     if lst[1] not in score: 
      score[lst[1]] = 0 

print(score) # Counter({'X': 2, 'Z': 1, 'Y': 1, 'A': 0, 'C': 0}) 

,如果你不希望用戶Counter這裏是你如何能解決你的代碼:

for i in L: 

    if i[0] not in dct: 
     dct[i[0]] = 0 
    if i[1] not in dct: 
     dct[i[1]] = 0 

    if i[2] == i[3]: 
     dct[i[0]] += 1 
     dct[i[1]] += 1 
+0

是的,櫃檯運作良好。但是,我不想使用計數器,因爲我最近沒有使用它。我知道我的問題是在你指出的早期階段分配得分。小心解釋我將如何初始化爲0?我認爲這會對其他人有所幫助。 – Maxxx

+0

@Maxxx:添加了一個應該修復你的代碼的更新。 –