将字典值从list转换为float

时间:2014-03-23 11:08:31

标签: python

我有一个名为“location”的字典,如下所示:

{
    'WA': [
        '47.3917',
        '-121.5708'
    ],
    'VA': [
        '37.7680',
        '-78.2057'
    ],
    ...
}

我想转换为值为float的值,因此它看起来像:

{
    'WA': [
        47.3917,
        -121.5708
    ],
    'VA': [
        37.7680,
        -78.2057
    ],
    ...
}

我试过

for key in location.keys():
    location[key] = float(location[key][0,1])
print location

它让我觉得“float()参数必须是字符串或数字”

我该如何解决?

3 个答案:

答案 0 :(得分:5)

您可以使用字典理解来构造一个字典,其值已转换为浮点数,如此

print {k:map(float, locations[k]) for k in locations}

正如@Grijesh in the comments section所建议的,如果您使用的是Python 3,

print({k:list(map(float, locations[k])) for k in locations})

答案 1 :(得分:3)

您的问题出在此处:float(location[key][0,1])

# float objects are length 1
for key in location.keys():
    location[key] = [float(location[key][0]),float(location[key][1])]
print location

答案 2 :(得分:0)

您可以在字典理解中使用列表理解 。由于您既需要键也需要值,因此请使用dict.items来迭代键值对:

res = {k: [float(x) for x in v] for k, v in locations.items()}

map与内置组件一起使用时效率更高,因此您不妨使用:

res = {k: list(map(float, v)) for k, v in locations.items()}

或者,因为有了坐标,所以可以使用元组值:

res = {k: tuple(map(float, v)) for k, v in locations.items()}

您的逻辑location[key][0,1]的问题在于Python列表不支持向量化索引,因此您需要明确说明,例如详细的[float(location[key][0]), float(location[key][1])]