python - 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)
谁知道这也许是编写我希望程序执行的代码的最佳方式,如果不是,请告诉我。
谢谢...
解决方案
一种 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()}
推荐阅读
- java - Java多类makefile
- javascript - 提交时清除输入字段
- javascript - 如何使用户能够使用 vue 从剪贴板粘贴图像?
- zeromq - 从 openvswitch 向 SDN 控制器发送 ZeroMQ 消息
- swift - Swift UnsafeMutableRawPointer 返回类而不是实例
- r - 将我的 for 循环保存为 R 中的数据框或列表
- ninja - 尽管源和依赖项已过期,但 Meson custom_target 永远不会执行
- python - Python telnet 读取长输出问题
- mysql - SQLSTATE [42S22]:未找到列:1054 未知列 '_method'
- javascript - ElectronJs 中的白页和空白页问题