首页 > 解决方案 > Python 字典和列表

问题描述

我正在编写 python 代码来解释我在玩线索游戏时收集的数据。在代码的特定部分中,我将卡片列表添加到三个不同集合之一,具体取决于哪个集合对应于我手中的卡片。此时我已经有一个列表,里面有 6 张卡片,就像这样......

standby_list = ['Mustard', 'Plum', 'Revolver', 'Candlestick', 'Study', 'Hall']

这些是我试图加到我手上的六张牌。此外,我已经有一本包含参与游戏的三个玩家的字典,并与他们的“玩家编号”配对,例如......

players = {"Billy" : "Player 0", "Bob" : "Player 1", "Joe" : "Player 2"}

最后,还有三套空套,每个玩家的牌一套……

player0_cards = set()
player1_cards = set()
player2_cards = set()

我的目标是(1)确定这三个空组中的哪一组对应于我(鲍勃)手中的牌,以及(2)将我的六张牌列表添加到该组中。

我现在拥有的代码看起来很糟糕并且“非 Pythonic”,如下所示。

standby_list = ['Mustard', 'Plum', 'Revolver', 'Candlestick', 'Study', 'Hall']

player0_cards = set()
player1_cards = set()
player2_cards = set()

players = {"Billy" : "Player 0", "Bob" : "Player 1", "Joe" : "Player 2"}

if players['Bob'] == 'Player 0':
    for card in standby_list:
        player0_cards.add(card)
elif players['Bob'] == 'Player 1':
    for card in standby_list:
        player1_cards.add(card)
elif players['Bob'] == 'Player 2':
    for card in standby_list:
        player2_cards.add(card)

谁知道这也许是编写我希望程序执行的代码的最佳方式,如果不是,请告诉我。

谢谢...

标签: pythonpython-3.xlistdictionary

解决方案


一种 Pythonic 解决方案是使用字典来存储可变数量的变量。抵制为每个变量命名的诱惑。相反,将相似的变量分组为键值字典映射。

另请注意,您可以使用set.update而不是将列表的每个项目按顺序添加到集合中。

这是一个例子。请注意,我们可以将返回的值players['Bob']直接提供给cards字典。由于这返回 a set,我们可以set.update在结果上使用。

standby_list = ['Mustard', 'Plum', 'Revolver', 'Candlestick', 'Study', 'Hall']

players = {"Billy" : "Player 0", "Bob" : "Player 1", "Joe" : "Player 2"}
cards = {'Player 0': set(), 'Player 1': set(), 'Player 2': set()}

cards[players['Bob']].update(standby_list)

print(cards)

{'Player 0': set(),
 'Player 1': {'Candlestick', 'Hall', 'Mustard', 'Plum', 'Revolver', 'Study'},
 'Player 2': set()}

推荐阅读