Python词典| ZIP |字典(拉链())

时间:2016-02-18 16:10:17

标签: python python-2.7 dictionary

我有python zip和词典的问题。我有名为dirs的列表,其中包含所有目录名称。我想生成类似下面的内容

dirs_count = {'placements':{'total':0,'Others':0},'x-force':{'total':0,'Others':0})

我使用以下代码生成此内容。

dirs = ['placemetns', 'x-code']
dirs_count = dict(zip(dirs,[{'total':0, 'others': 0}]*len(dirs)))
# {'placements':{'total':0,'others':0},'x-code':{'total':0,'others':0}}

但问题是,如果我修改一个字典值,会发生以下情况......

dirs_count['placements']['total'] = 5
# {'placements':{'total':5,'others':0},'x-code':{'total':5,'others':0}}

有什么方法可以阻止这种情况吗?
要么
有没有办法生成dirs_count,它不会影响修改时的字典?

2 个答案:

答案 0 :(得分:3)

使用dirs_count = {d: {'total': 0, 'others': 0} for d in dirs}

在您的情况下,placementsx-code都指向同一个对象。

答案 1 :(得分:1)

这种情况正在发生,因为[{'total':0, 'others': 0}]*len(dirs)为您提供了对同一个dict的多个引用,因此对一个dict的任何更改都会影响所有副本。尝试改为

dirs = ['placemetns', 'x-code']
dicts = [{'total':0, 'others': 0} for i in dirs]
dirs_count = dict(zip(dirs,dicts))