如何将Python嵌套字典中的字符串值转换为float类型?
问题描述
现有如下嵌套字典data:
data={"Volkswagen":{ "Caddy Kombi":{ "2022":"285000000.00", "2021":"212500000.00" }, "Caddy Cargo":{ "2022":"193100000.00", "2021":"190100000.00", "2019":"1289456545.00" } }, "Tesla":{ "Model 3":{ "2022":"707160000.00", "2021":"630000000.00", "2020":"630000000.00" }, "Model S":{ "2021":"630000000.00", "2020":"630000000.00" }, "Model X":{ "2021":"1102500000.00", }, "Model Y":{ "2021":"735000000.00", "2020":"735000000.00" } }}
需要将字典中所有字符串格式的价格值转换为float类型(例如把"2021":"285000000.00"转为"2021":285000000.00),且转换后保持原字典结构不变。
用户尝试了以下代码但未得到预期结果:
for i, y in data.items(): for k, x in y.items(): for z,q in (y[k].items()): print(float(q)) dictionary = { i: { k: x } } print(dictionary)
正确实现方法
方法1:直接修改原字典
遍历字典的每一层嵌套,直接将最内层的字符串价格转为float类型:
for brand, models in data.items(): for model, years in models.items(): for year, price_str in years.items(): years[year] = float(price_str)
执行后原字典data的结构完全保留,所有字符串格式的价格都会被替换为对应的float值。
方法2:创建新字典(不修改原数据)
如果需要保留原字典的原始数据,可以生成一个结构完全一致的新字典:
new_data = {} for brand, models in data.items(): new_data[brand] = {} for model, years in models.items(): new_data[brand][model] = {year: float(price_str) for year, price_str in years.items()}
运行后new_data就是转换完成的目标字典,原data不受任何改动。
原代码无效的原因
你写的代码只是在循环中打印转换后的数值,并且每次循环都会重新创建一个仅包含当前品牌和车型的小型字典,既没有修改原字典,也没有逐步构建出完整的目标字典,所以最终无法得到结构完整的转换结果。
内容的提问来源于stack exchange,提问作者lord stock
相关产品推荐
相关产品推荐

