背景關系:我有一個包含一些足球比賽結果的字典,我想創建第二個字典,將這些值顯示為包含足球比賽結果的串列。
例如,我有這個初始字典:
dict_results = {('FCP', 'SLB'): (1, 4),
('FCP', 'SCP'): (2, 5),
('SLB', 'FCP'): (2, 6),
('SLB', 'SCP'): (1, 5),
('SCP', 'FCP'): (2, 4),
('SCP', 'SLB'): (1, 4)}
我想得到這種格式:
tabela = {'FCP': [win, draw, loss, scored_goals, suff_goals, points],
'SLB': [win, draw, loss, scored_goals, suff_goals, points],
'SCP': [win, draw, loss, scored_goals, suff_goals, points]}
我試圖做這樣的事情:
tabela = {}
for teams,goals in dict_results.items():
win = 0
draw = 0
loss = 0
scored_goals = 0
suff_goals = 0
points = 0
print(teams,goals)
if teams[0] not in tabela:
tabela[teams[0]] = [win, draw, loss, scored_goals, suff_goals, points]
if goals[0] > goals[1]:
#teams[0] update
win = 1
scored_goals = goals[0]
suff_goals = goals[1]
points = 3
tabela[teams[0]].update([win,draw,loss,scored_goals,suff_goals,points])
elif goals[0] == goals[1]:
draw = 1
scored_goals = goals[0]
suff_goals = goals[1]
points = 1
tabela[teams[0]].update([win,draw,loss,scored_goals,suff_goals,points])
tabela[teams[1]].update([win,draw,loss,scored_goals,suff_goals,points])
elif goals[0] < goals[1]:
...
但是值保持在 0(它們實際上并沒有更新)這真的很有意義,因為每次迭代我基本上都是在“重置”值,即使值按照我想要的方式更新,我也不會并沒有真正獲得累積值。
我怎么做才能比較每個團隊的目標并相應地更新結果?例如,在元組 ('FCP','SLB') 中,'FCP' 的進球數為 1,SLB 的進球數為 4,這意味著 'FCP' 進了 4 個球,進了 1 個球,沒有得分,將損失增加 1 和 'SLB' 將勝利增加 1,遭受 1 個進球,打進 4 個進球并獲得 3 分(不使用字典或串列理解)
先感謝您!
uj5u.com熱心網友回復:
另外,您正在回圈遍歷兩個團隊,但您只記錄第一個團隊的結果。你可以用一個額外的 for 回圈來獲得兩個團隊。
tabela = {}
for teams,goals in dict_results.items():
for iter in range(len(teams)):
team = teams[iter]
win = 0
draw = 0
loss = 0
scored_goals = 0
suff_goals = 0
points = 0
if iter == 0:
n = 0
m = 1
else:
n = 1
m = 0
if team not in tabela:
tabela[team] = [win, draw, loss, scored_goals, suff_goals, points]
if goals[n] > goals[m]:
win, draw, loss, scored_goals, suff_goals, points = tabela[team]
win = 1
scored_goals = goals[n]
suff_goals = goals[m]
points = 3
tabela[team] = [win,draw,loss,scored_goals,suff_goals,points]
elif goals[n] < goals[m]:
win, draw, loss, scored_goals, suff_goals, points = tabela[team]
win = 0
scored_goals = goals[n]
suff_goals = goals[m]
points = 0
tabela[team] = [win,draw,loss,scored_goals,suff_goals,points]
elif goals[n] == goals[m]:
win, draw, loss, scored_goals, suff_goals, points = tabela[team]
win = 0
scored_goals = goals[n]
suff_goals = goals[m]
points = 1
tabela[team] = [win,draw,loss,scored_goals,suff_goals,points]
print(tabela)
>>{'FCP': [2, 0, 0, 13, 13, 6], 'SLB': [2, 0, 0, 11, 13, 6], 'SCP': [2, 0, 0, 13, 11, 6]}
根據您的迭代iter,n并m切換數字。通過這種方式,if 陳述句會檢查第 1 次迭代中團隊 1 的分數和第 2 次迭代中團隊 2 的分數。
uj5u.com熱心網友回復:
你是對的,看起來你確實在每次迭代中“重置”這些值。在 Python 中,該.update函式不添加值,它只是替換字典條目。您仍然可以使用tabela[team].update,您只需要自己添加之前的值。
這是如何做到這一點的代碼示例:
...
if goals[0] > goals[1]:
#teams[0] update
win, draw, loss, scored_goals, suff_goals, points = tabela[teams[0]]
win = 1
scored_goals = goals[0]
suff_goals = goals[1]
points = 3
tabela[teams[0]].update([win,draw,loss,scored_goals,suff_goals,points])
elif goals[0] == goals[1]:
...
elif goals[0] < goals[1]:
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/404584.html
標籤:
下一篇:python字典的查詢語言
