2016-03-07 89 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