将一组键值映射为零

时间:2018-03-25 23:15:30

标签: python python-3.x dictionary

我通过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])

2 个答案:

答案 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循环中