2016-02-18 158 views
0

我有一個python zip和字典的問題。我有名爲dirs的列表,其中包含所有目錄名稱。我想下面生成一個Python詞典| ZIP |字典(zip())

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它不會影響對修改entier詞典在哪?

+3

'[{'total':0,'others':0} for _ in dirs]' – vaultah

回答

1

發生這種情況是因爲爲您提供了一些對同一詞典的引用,因此對其中的任何更改都會影響到所有副本。請嘗試改爲

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

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

你的情況會發生什麼,placementsx-code指的是同一個對象。

+0

是的,我明白它指的是同一個對象。感謝分享:) –

+0

@ 7H3IN5ID3R - 你沒有暗示你的問題,你知道它爲什麼會發生。這對於pythonic這個問題來說是一個很好的解決方案,而且比使用'zip'解決某些解決方案更直接。 – tdelaney

+0

是的,這是我的錯誤。我沒有提到這個問題。實際上,我期望一個解決方案 - 打破對象的引用並複製相同的對象並創建新的複製。但是,這是不可能的。我的錯..! –