2016-03-07 91 views
2

我需要在Python字典中轉換一些值(讀爲字符串)。用點替換逗號並在浮點數中轉換值(python字典)

想這是我的出發詞典:

dd = {'sp': ['1,1', '3,2'], 'tt': ['a', 'b'], 'zz': [4.5, 2.1]} 

什麼,我想這樣做是運行在字典中值的測試,如果有一個逗號(,)與點更換(.)和將其轉換爲浮動。

換句話說,DD應該轉變成這個新字典:

dd = {'sp': [1.1, 3.2], 'tt': ['a', 'b'], 'zz': [4.5, 2.1]} 

我認爲這是一個出發點:

for i, v in enumerate(d.values()): 
    if ',' in v[i] and isinstance(v[i], str): 
     float(v[i].replace(',', '.')) 

,但值不原詞典覆蓋

回答

2

您可以使用列表解析來遍歷每個item在每個字典值,並將其轉換爲在該item既是str類型和情況下float包含,

dd = {'sp': ['1,1', '3,2'], 'tt': ['a', 'b'], 'zz': [4.5, 2.1]} 

for k in dd: 
    dd[k] = [float(item.replace(',', '.')) if type(item) == str and ',' in item 
     else item for item in dd[k]] 

print(dd) 

輸出

{'tt': ['a', 'b'], 'sp': [1.1, 3.2], 'zz': [4.5, 2.1]} 

你需要檢查item是型,因爲檢查float中是否存在字符串(例如,)將生成TypeError

,如果你想要做同樣的事情,但不使用列表理解(見註釋),你可以做到以下幾點:

dd = {'sp': ['1,1', '3,2'], 'tt': ['a', 'b'], 'zz': [4.5, 2.1]} 

for k in dd: 
    for i in range(len(dd[k])): 
     if type(dd[k][i]) == str and ',' in dd[k][i]: 
      dd[k][i] = float(dd[k][i].replace(',', '.')) 

print(dd) 
+0

不到5分鐘..真棒..只是一件事..是否有可能寫你的代碼沒有列表理解? – matteo

+0

@matteo請參閱我的更新回答此功能 – gtlambert

+0

非常感謝!完美的作品! – matteo