Python字典和清单

时间:2018-07-02 21:08:32

标签: python python-3.x list dictionary

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

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

这些是我尝试添加到手的六张牌。另外,我已经有了游戏中涉及的三位玩家的字典以及他们的“玩家编号”,例如...

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

最后,有3个空套,每个玩家的纸牌一套...

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)

谁知道这可能是为我希望程序执行的操作编写代码的最佳方法,如果没有,请告诉我。

谢谢...

3 个答案:

答案 0 :(得分:2)

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

请注意,您也可以使用set.update来代替将列表的每个项目依次添加到集合中。

这是一个例子。请注意,我们可以将players['Bob']返回的值直接输入到cards字典中。由于此操作返回了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()}

答案 1 :(得分:1)

这样的事情怎么样

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']].add(tuple(standby_list))
print (cards[players['Bob']])
# {('Mustard', 'Plum', 'Revolver', 'Candlestick', 'Study', 'Hall')}

答案 2 :(得分:1)

您可以将standby_list初始化为一个集合(因为卡是唯一的),players初始化为列表,并使用列表推导生成player_cards以使其具有Python风格。指定“ Player 1”,“ Player 2”和“ Player 3”是多余的,因为列表索引本身可以表示玩家编号。

standby_list = {'Mustard', 'Plum', 'Revolver', 'Candlestick', 'Study', 'Hall'}
players = ['Billy', 'Bob', 'Joe']
player_cards = [standby_list if player == 'Bob' else set() for player in players]

player_cards将变为:

[set(), {'Study', 'Revolver', 'Mustard', 'Plum', 'Hall', 'Candlestick'}, set()]

您的玩家号码可以是用于访问player_cards组合列表的整数。