我通过for循环输入一组键。
myDict = {}
for i in range(n):
team = input().split()
t1 = team[0]
t2 = team[1]
输入的值(对于n = 10)是:
Truckers Trekkers
Riders Bikers
Wanderers Rovers
Rovers Riders
Trekkers Wanderers
Bikers Truckers
Wanderers Bikers
Truckers Rovers
Riders Trekkers
Trekkers Wanderers
我一直试图在for循环中将这些名称初始化为字典中的值0。例如,这是我想要的最终结果:
myDict = {'Truckers': 0, 'Trekkers':0,'Riders':0,'Bikers':0,'Wanderers':0,'Rovers':0}
为了实现这一点,我尝试使用myDict.fromkeys(t1,0)
并继续获取一系列空列表。或者,我也尝试创建一个空列表(lst
),并将t1
的每个值附加到它:lst.append(t1)
并创建另一个空列表lst1
并附加0时间:lst1.append(0)
。然后我用了:
myDict = dict(zip(lst, lst1))
然而,虽然这得到了结果,但直到完成for循环之后。在for循环中有没有办法将上面的输入值添加到字典?例如,当您输入' Trucker' ' Trekkers',它被添加到myDict,值为0(例如myDict = 'Trucker':0,'Trekkers':0
)。
编辑:
Truckers Trekkers 87 75
Riders Bikers 80 90
Wanderers Rovers 53 81
Rovers Riders 47 51
Trekkers Wanderers 72 70
Bikers Truckers 25 30
Wanderers Bikers 40 35
Truckers Rovers 50 55
Riders Trekkers 61 45
Trekkers Wanderers 70 73
对于本联盟中的每支球队,第一支球队(t1)代表主队,第二支球队代表客队(t2),第三和第四名分别代表每支球队的得分(即Truckers得分为87分)和Trekkers得分是75)。在这个联赛中,当主队获胜时,他们获得3000分,当客场球队获胜时 - 3500分,平局 - 1000分和亏损 - 50分。
在第一种情况下,Truckers是主队,他们赢了(87> 75),所以他们获得了3000分加上比赛中的87分。此外,由于Trekkers输掉了比赛结果,获得了50分(由于损失)+ 75。因此,3087将添加到Truckers,125添加到Trekkers。在第二种情况下,Riders是主队,而自20世纪80年代以来他们就是客场球队。 90.骑自行车的人获得3500分+90(3590);和骑手获得3000 + 80(3080)。所以目前,myDict看起来像这样:
{'Truckers': 3087, 'Trekkers': 125, 'Bikers': 3590, 'Riders': 3080}
最后,字典应该是这样的:
{'Wanderers': 6836, 'Truckers': 6717, 'Bikers': 3750, 'Rovers': 7233, 'Riders': 6742, 'Trekkers': 3412}
完整代码:
if __name__ == '__main__':
n = int(input())
homeWin = 3000
awayWin = 3500
draw = 1000
loss = 50
myDict = {}
lst = []
lst1 = []
myDict[t1] = 0
myDict[t2] = 0
for n_itr in range(n):
team = input().split()
t1 = team[0]
t2 = team[1]
p1 = int(team[2])
p2 = int(team[3])
#lst.append(t1)
#lst1.append(0)
#myDict.update(dict.fromkeys(lst, 0))
#myDict = dict(zip(lst, lst1))
if p1 > p2:
myDict[t1] += p1 + homeWin
myDict[t2] += p2 + loss
elif p1 < p2:
myDict[t2] += p2 + awayWin
myDict[t1] += p1 + loss
elif p1 == p2:
myDict[t1] += t1 + draw
myDict[t2] += t2 + draw
print(myDict)
#print(max(myDict.items(), key=operator.itemgetter(1))[0])
#print(min(myDict.items(), key=operator.itemgetter(1))[0])
答案 0 :(得分:0)
collections.Counter
可用于跟踪这些分数。
无需为每个团队设置0的起始分数。它还消除了在运行算法之前定义键的需要。
<强>解决方案强>
from collections import Counter
lst = ['Truckers Trekkers 87 75', 'Riders Bikers 80 90',
'Wanderers Rovers 53 81', 'Rovers Riders 47 51',
'Trekkers Wanderers 72 70', 'Bikers Truckers 25 30',
'Wanderers Bikers 40 35', 'Truckers Rovers 50 55',
'Riders Trekkers 61 45', 'Trekkers Wanderers 70 73']
c = Counter()
for i in lst:
home, away, home_score, away_score = i.split()
home_score = int(home_score)
away_score = int(away_score)
if home_score > away_score:
c[home] += 3000 + home_score
c[away] += 50 + away_score
elif away_score > home_score:
c[home] += 50 + home_score
c[away] += 3500 + away_score
elif home_score == away_score:
c[home] += 1000 + home_score
c[away] += 1000 + away_score
<强>结果强>
Counter({'Bikers': 3750,
'Riders': 6742,
'Rovers': 7233,
'Trekkers': 3412,
'Truckers': 6717,
'Wanderers': 6836})
<强>解释强>
collections.Counter
就像提供的所有密钥的简单计数器一样,即使它们没有明确添加也是如此。c['MyTeam'] += 100
会将现有分数加100,或者如果密钥不存在则设置c['MyTeam'] = 100
。答案 1 :(得分:-1)
你只需要添加
myDict[t1] = 0
myDict[t2] = 0
在你的for循环中