Переформатирование кода в List Comprehensions

Рейтинг: 0Ответов: 1Опубликовано: 05.02.2023

Написал код который парсит csv файл и формирует список в формате [['value_1', 'value_2', km], ....]:

with open("values.csv") as file:
    text = file.read().splitlines()

db = []
for i in range(len(text)):
    text_string = text[i]
    new_element = text_string.split(';')
    third_to_int = int(new_element.pop())
    new_element.append(third_to_int)
    db.append(new_element)

Можно как то сделать код короче в формате List Comprehensions?

Пытаюсь вот так но выдает ошибку.

new_db = [[text[i].text_string.split(';').pop] for i in range(len(text))]

Сделал,

new_db = [text[i].split(';') for i in range(len(text))]

но теперь нужно что бы 3 значение было тип int, а не строка?

Так тоже не получается:

new_db = [map(int, i.split(';')) for i in text]

Ответы

▲ 0Принят

Если два раза разбирать строку, то так:

with open('values.csv') as f:
    db = [line.split(';')[:-1] + [int(line.split(';')[-1])] for line in f] 
print(db)

Если разбирать один раз, то так:

with open("temp.txt") as f:

    def cvt(tokens):
        return tokens[:-1] + [int(tokens[-1])]

    db = [cvt(line.split(';')) for line in f] 

print(db)

Или так:

with open("temp.txt") as f:
    db = [
        (lambda tokens: tokens[:-1] + [int(tokens[-1])])(line.split(';'))
        for line in f
    ] 
print(db)