如何比较列表和字典值并分配变量

2024-05-16 11:05:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表,其中有一定数量的战斗胜利者,由用户输入,例如winners = ['Hunt', 'Nunes', 'Cormier']

然后我有一个字典,把每个玩家的正确猜测作为值,把他们的名字作为键,然后我的程序将胜利者列表与每个键的值进行比较,告诉每个玩家他们猜对了多少场比赛

for name in player_dict:
    player_dict[name].sort()
    player_dict[name] = set(player_dict[name]) & set(winners)
    wins = (len(player_dict[name]))
    print(name + ' guessed ' + str(wins) + ' fights correctly.')

我想做的是根据猜对了多少人给每一场比赛一个值,然后用这个值来确定每一个猜对了胜利者的玩家能得到多少。在

编辑:这里是我的全部代码,以帮助提供清晰

^{pr2}$

Tags: 用户name列表数量字典玩家dictplayer
1条回答
网友
1楼 · 发布于 2024-05-16 11:05:28

下面计算一个玩家在players字典中所做的正确猜测数。如果是这样,你可以用listintersection()winnersset来实现。在

为此,将一个获奖者姓名列表添加到正在运行的total,然后将其转换为Counter集合(接受iterable并返回一个键/值数据结构,该结构记录列表中相同键的出现次数)。由此我们可以推断出必要的猜测数据。在

from collections import Counter

winners = set([['Hunt', 'Nunes', 'Cormier'])
players = {'player1': ['Nunes', 'Cormier', 'test1', 'test2'], 
'player2': ['Nunes','test1', 'test2','test3', 'test4'],  
'player3' : ['Hunt', 'Nunes', 'Cormier']}

total = []
for player, picks in players.iteritems():
    inter = winners.intersection(picks)
    total.extend(inter)  # Add to list of winner names.
    print player, 'guessed:', len(inter), 'fights correctly.'

for fighter, guess in Counter(total).iteritems():
    print fighter,'was guessed correctly',guess,'times.' if guess>1 else 'time.'

或者你可以采用一种更为函数式编程的方法(灵感来自于user:@AMomchilov's思想)。在

^{pr2}$

样本输出:

>>> player2 guessed: 1 fights correctly.
>>> player3 guessed: 3 fights correctly.
>>> player1 guessed: 2 fights correctly.
>>> Cormier was guessed correctly 2 times.
>>> Nunes was guessed correctly 3 times.
>>> Hunt was guessed correctly 1 time.

相关问题 更多 >