从字符串转换字典列表中的值

2024-04-27 10:28:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字典列表,每个字典中的每一项都是一个字符串。我试图构建一个公式来传递整个数据集,并将所有值转换为一个float。你知道吗

每个词典都有以下结构:

{'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])

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


Tags: 字符串in列表fordatetime字典valuefloat
2条回答

您可以使用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()}

添加所需代码并插入一些基本调试。查看这个可爱的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是dict,您可以使用提取的键对其进行索引:

trips[trip] = float ...

相关问题 更多 >