簡體   English   中英

如何比較列表和字典值以及分配變量

[英]How to compare list and dictionary values and assign a variable

我有一個列表,其中包含來自戰斗的一定數量的獲勝者,由用戶輸入,例如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.')

我想要做的是根據正確猜出的人數為每個比賽指定一個值,然后使用該值確定每個正確猜出該比賽獲勝者的彩池。

編輯:這是我的整個代碼,以幫助提供清晰的信息

#!  python3

#fight_gambler.py - a program that lets players gamble on fights with friends

players = []
while len(players) >= 0:
    name = input('Enter a name: ')
    players.append(name)
    if name == '':
        players.pop()
        break
    else:
        pass  

player_dict = {name: [] for name in players} #creates a key for each name with that name as the key
print(player_dict)

fight_amount = int(input('How many fights are there? '))
fight_number = 1
for name in player_dict:                    #adds fight winner prediction as values to each name 

fight_number = 1

while fight_number <= fight_amount:
        answer = input(name + ', who will win fight ' + str(fight_number) + '? ')
        player_dict[name].append(answer)
        fight_number = fight_number + 1
fight_number = 1
winners = []

while fight_number <= fight_amount:                   # creates a list of fight winners
    winner = input('Who won fight ' + str(fight_number) + '? ')
    winners.append(winner)
    fight_number = fight_number + 1
winners.sort()

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.')

以下內容將計算players詞典中players 正確猜出的次數。 如果是這樣,您可以使用帶有一set winnerslistintersection()來執行此操作。

除此之外,將獲勝者的姓名列表添加到運行total ,然后將其轉換為Counter集合( 接受可迭代項,並返回鍵/值數據結構,該結構保留了在其中找到的相同鍵的出現次數列表 )。 由此我們可以推斷出必要的猜測數據。

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.'

或者您可以采用功能強大的編程方法( 受用戶啟發: @AMomchilov的想法 )。

players_num_correct_picks = dict((k, winners.intersection(v)) for (k, v) in players.items())
for player, picks in players_num_correct_picks.items():
    print player, 'guessed:', len(picks), 'fights correctly.'

total = Counter(item for sublist in players_num_correct_picks.values() for item in sublist)
for fighter, guess in total.items():
    print fighter,'was guessed correctly',guess,'times.' if guess>1 else 'time.'

樣本輸出:

>>> 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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM