将一组钥匙值映射到零



我正在通过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 

我一直在试图将这些名称初始化为词典中的值0,而在for循环中。例如,这是我想要的最终结果:

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"时,它将以0的值添加到MyDict(例如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(,第三和第4个论点分别代表每个团队的积分(即卡车师得分为87徒步旅行者的得分是75(。在这个联盟中,当主队获胜时,他们获得了3000分,当一支客队获胜-3500分,平局-1000和50分-50分。

在第一个案件中,卡车司机是主队,他们获胜(87> 75(,因此他们获得了3000分,加上比赛中的87分。同样,自徒步旅行者输掉比赛以来,比赛的结果获得了50分(由于损失( 75分。因此,将3087添加到卡车司机中,徒步旅行者将125次添加。在第二种情况下,骑手是主队,骑自行车的人是自80&LT以来的客队。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])

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如果键不存在。

您只需要添加

myDict[t1] = 0
myDict[t2] = 0

在您的循环中

最新更新