递增列表值

时间:2015-11-15 22:34:44

标签: list loops python-3.x

我有一个我正在复制的播放器模板,设置一个字段,然后将更新后的模板添加到新列表中。

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等?

1 个答案:

答案 0 :(得分:1)

目前,您每次迭代都会覆盖前一个玩家。这是因为字典是mutable个对象,而你正在使用相同的字体。

您需要deep-copy代表玩家的映射:

import copy

for i in range(4):
    p["player"] = i
    players.append(copy.deepcopy(p))

我已经使用了copy.deepcopy,但您可以根据需要手动执行此操作。

更好的方法是使用实​​际的类来重复发布Player