繁体   English   中英

如何在python中的有序字典中更改特定值

[英]How to change a specific value in an ordered dictionary in python

我正在努力弄清楚如何完成以下概述的工作。

我正在使用有序词典来跟踪每个玩家(键)的分数(值)。 for循环重复播放器的次数。

我的想法是更新与for循环中x索引相同的键的值,但是我似乎无法弄清楚如何执行它。 任何建议表示赞赏,我完全有可能以错误的方式进行处理。

这是我到目前为止所拥有的:

numberOfPlayers = input("\nEnter number of players : ")
print("The number of players has been set to %s \n" % 
(numberOfPlayers))
numberOfPlayersInt = int(numberOfPlayers)
players = collections.OrderedDict()

for index in range(numberOfPlayersInt):
    teamName = input('Team/Player %i, enter a team name :' %(index))
    players[teamName] = 0

    for x in range(numberOfPlayersInt):
        print("Player %d, your question :" % (x + 1)) 
        answer = str(input("\nCorrect ? "))
        if answer.lower() in ['y', 'yes']:
            pass
            #some code here that updates the value for this player.

包含3个条目的字典-a-c看起来像这样:

OrderedDict([('a', 0), ('b', 0), ('c', 0)])

您可以遍历当前词典,并使用它来构建具有新值的替换OrderedDict 通过枚举原始OrderedDict的项目,我们可以获得它们的索引,然后可以将这些vlaues传递给函数以确定它们的新值:

def new_value(index, key, value):
    print("Player %d, your question :" % (index + 1)) 
    answer = str(input("\nCorrect ? "))
    if answer.lower() in ['y', 'yes']:
        return value + 10
    else:
        return value

od = OrderedDict.fromkeys(['player1', 'player2', 'player3'], 0)

od = OrderedDict((k, new_value(i, k, v)) for i, (k, v) in enumerate(od.items()))

您可以使用类似的技术来修改现有字典中的值:

for i, (k, v) in enumerate(od.items()):
    od[k] = new_value(i, k, v)

我相信您想要的只是更新以播放器名称为键的当前播放器的值。 我接受了您的代码,并添加了一些描述性的更改,同时使它的样式更具蟒蛇性(蛇皮等):

import collections

num_of_players = int(input("\nEnter number of players : "))
print("The number of players has been set to %s \n" % (num_of_players))

players = collections.OrderedDict()

POINTS_INCREASE = 5 # or any other update you want here

for index in range(num_of_players):
    team_name = raw_input('Team/Player %i, enter a name :' % (index))
    players[team_name] = 0

    print("Lets update player %d ..." % (index))
    answer = str(raw_input("\nCorrect (y, yes) ? "))
    if answer.lower() in ['y', 'yes']:
        players[team_name] += POINTS_INCREASE

print players

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM