我有一个我正在复制的播放器模板,设置一个字段,然后将更新后的模板添加到新列表中。
player_template = {
"player": "",
"hand": [
{0 :
{
"cards_in_hand": [],
"cards_taken": []
}
}
]
}
然而,当我去做一个范围循环来创建多个玩家时,它只会多次创建最后一个玩家。
for i in range(4):
p["player"] = i
players.append(p)
输出:
[
{
'player': 3,
'hand': [
{
0: {
'cards_in_hand': [],
'cards_taken': []
}
}
]
},
{
'player': 3,
'hand': [
{
0: {
'cards_in_hand': [],
'cards_taken': []
}
}
]
},
{
'player': 3,
'hand': [
{
0: {
'cards_in_hand': [],
'cards_taken': []
}
}
]
},
{
'player': 3,
'hand': [
{
0: {
'cards_in_hand': [],
'cards_taken': []
}
}
]
}
]
我已尝试range(start, stop, step)
,但它也会产生相同的结果。如何将输出变为播放器1,播放器2等?
答案 0 :(得分:1)
目前,您每次迭代都会覆盖前一个玩家。这是因为字典是mutable个对象,而你正在使用相同的字体。
您需要deep-copy代表玩家的映射:
import copy
for i in range(4):
p["player"] = i
players.append(copy.deepcopy(p))
我已经使用了copy.deepcopy
,但您可以根据需要手动执行此操作。
更好的方法是使用实际的类来重复发布Player
。