用点替换逗号并在浮点数中转换值(python字典)
问题描述:
我需要在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(',', '.'))
,但值不原词典覆盖 。
答
您可以使用列表解析来遍历每个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)
不到5分钟..真棒..只是一件事..是否有可能写你的代码没有列表理解? – matteo
@matteo请参阅我的更新回答此功能 – gtlambert
非常感谢!完美的作品! – matteo