2015-08-27 187 views
1

我有一本字典蟒蛇修改字典中的值到另一個字典

a = {'aaa_key': ['aaa/aaa.csv', 'aaa/aaa.csv', 'aaa.csv'], 'bbb_key': ['bbb/bbb.csv', 'bbb/bbb.csv', 'bbb.csv']} 

,我想將拆分內部列表值/跡象。 我用這個代碼,並print給了我像

aaa_key [['aaa', 'aaa.csv'], ['aaa', 'aaa.csv'], ['aaa.csv']] 

bbb_key [['bbb', 'bbb.csv'], ['bbb', 'bbb.csv'], ['bbb.csv']] 

,但是當我嘗試打印AA字典,它的列表恰巧是空{'aaa_key': [], 'bbb_key': []}正確的價值觀。我究竟做錯了什麼? code sample

b = [] 
aa = dict() 
for i in a: 
    for ii in a[i]: 
     b.append(str(ii).split('/')) 
    print str(i) + ' ' + str(b) 
    aa[i] = b 
    del b[:] 

print aa 
+0

該字典中充滿了*完全相同的列表*,您在每次循環迭代結束時仔細清空。試試'aa [i] = b [:]'...... – jonrsharpe

回答

1

當您指定b到字典值實際上這兩個值和b指一個對象,當你刪除它del b[:]實際上你刪除了兩個。所以你需要刪除那個部分。

但作爲一個更Python的方式,你可以簡單地用一個dictionary comprehension創建您的預期詞典:

>>> {key:[i.split('/') for i in value] for key,value in a.items()} 
{'aaa_key': [['aaa', 'aaa.csv'], ['aaa', 'aaa.csv'], ['aaa.csv']], 'bbb_key': [['bbb', 'bbb.csv'], ['bbb', 'bbb.csv'], ['bbb.csv']]} 

請注意,您也可以重新分配給a

+0

完美無缺,謝謝! –

1

當你清洗名單b的內容也清除這是從同一個變量分配的字典值的內容。變量b和字典值都是指相同的列表

而不是清空內容,只要將變量b與新列表的引用相關聯,每次循環訪問新密鑰。

實施

def foo(a): 
    aa = dict() 
    for i in a: 
     b = [] 
     for ii in a[i]: 
     b.append(str(ii).split('/')) 
     aa[i] = b 

    return aa 

樣品試驗

>>> foo(a) 
{'aaa_key': [['aaa', 'aaa.csv'], ['aaa', 'aaa.csv'], ['aaa.csv']], 'bbb_key': [['bbb', 'bbb.csv'], ['bbb', 'bbb.csv'], ['bbb.csv']]}