Преобразование значений в списке словарей из строки в число с плавающей точкой - PullRequest
0 голосов
/ 01 июля 2019

У меня есть список словарей, где каждый элемент в каждом словаре является строкой. Я пытаюсь создать формулу для прохождения всего набора данных и преобразования всех значений в число с плавающей точкой.

Каждый словарь имеет следующую структуру:

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

3 голосов
/ 01 июля 2019

Вы можете перебирать словарь, используя 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()}
0 голосов
/ 01 июля 2019

Добавьте необходимый код и вставьте некоторую базовую отладку.Смотрите этот прекрасный 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.Затем, вместо того, чтобы использовать это для индексации слова, вы решили перебирать отдельные символы самого ключа.Наконец, вы попытались использовать отдельную букву в качестве указателя на ключ, который представляет собой простую строку.

Вот что увидел интерпретатор Python;он бросил вам сообщение об ошибке.Вместо этого удалите этот самый внутренний цикл.trips является диктовкой, и вы используете извлеченный ключ для его индексации:

trips[trip] = float ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...