将字典列表中的值从字符串转换为浮点型

时间:2019-07-01 16:26:46

标签: python list dictionary

我有一个词典列表,其中每个词典中的每个项目都是一个字符串。我正在尝试建立一个公式来传递整个数据集并将所有值转换为浮点数。

每本词典具有以下结构:

{'dropoff_datetime': '2014-11-26T22:31:00.000',
 'dropoff_latitude': '40.746769999999998',
 'dropoff_longitude': '-73.997450000000001',
 'fare_amount': '52',
 'imp_surcharge': '0',
 'mta_tax': '0.5',
 'passenger_count': '1',
 'payment_type': 'CSH',
 'pickup_datetime': '2014-11-26T21:59:00.000',
 'pickup_latitude': '40.64499',
 'pickup_longitude': '-73.781149999999997',
 'rate_code': '2',
 'tip_amount': '0',
 'tolls_amount': '5.3300000000000001',
 'total_amount': '57.829999999999998',
 'trip_distance': '18.379999999999999',
 'vendor_id': 'VTS'}

我正在尝试将值转换为浮点数

def float_values(trips):    
    for trip in trips:
        for value in trip:
            trip[value] = float(trip[value])

我收到错误消息字符串索引必须为整数

2 个答案:

答案 0 :(得分:3)

您可以使用items()iteritems()遍历字典,具体取决于您的python版本。词典中的某些值是字符串,因此无法转换。一个幼稚的解决方案如下:

def float_values(trips):
    for key, value in trips.items():
        try:
            trips[key] = float(value)
        except ValueError:
            continue

如果您愿意,也可以将其更改为使用理解,但是请注意isdigit()函数

def float_values(trips):
    return {key: float(value) if value.isdigit() else value for key, value in trips.items()}

答案 1 :(得分:0)

添加所需的代码并插入一些基本调试。请访问这个可爱的debug博客以获取帮助。

def float_values(trips):
    for trip in trips:
        print("trip =", trip)
        for value in trip:
            print("value =", value)
            trip[value] = float(trip[value])

data = {
    'dropoff_datetime': '2014-11-26T22:31:00.000',
    'dropoff_latitude': '40.746769999999998',
    'dropoff_longitude': '-73.997450000000001',
 }

float_values(data)

输出:

trip = dropoff_datetime
value = d
Traceback (most recent call last):
  File "so.py", line 14, in <module>
    float_values(data)
  File "so.py", line 6, in float_values
    trip[value] = float(trip[value])
TypeError: string indices must be integers

您提取了dict键。然后,您决定不遍历键本身的各个字符,而不是使用该索引为dict编制索引。最后,您尝试使用单个字母作为键的索引,键是一个简单的字符串。

这就是Python解释器所看到的;它引发了一条错误消息。而是删除最里面的循环。 trips是字典,您可以使用提取的键对其进行索引:

trips[trip] = float ...