Python список строк 2d в смешанный список int / string - PullRequest
1 голос
/ 10 февраля 2020

Получил этот список:

test_list = [['1', '350', 'apartment'], ['2', '300', 'house'], ['3', '300', 'flat'], ['4', '250', 'apartment']]

Попытка получить смешанный список как

test_list = [[1, 350, 'apartment'], [2, 300, 'house'], [3, 300, 'flat'], [4, 250, 'apartment']]

Пока что моя попытка:

res = [list(map(lambda ele : int(ele) if ele.isdigit()  
          else ele, test_list)) for ele in test_list ] 

Но, похоже, работать.

Ответы [ 3 ]

4 голосов
/ 10 февраля 2020

Зачем использовать карту, если вы уже знаете, что позиции правильны для каждого подсписка

res = [[int(x), int(y), z] for x, y, z in test_list] 

Результат

[[1, 350, 'apartment'], [2, 300, 'house'], [3, 300, 'flat'], [4, 250, 'apartment']]    

Или даже лучше, так как это может быть в конце концов диктованным, используйте его для понимания:

res = {int(i): {'price': int(p), 'name': n} for i, p, n in test_list}

Результат

{1: {'price': 350, 'name': 'apartment'}, 2: {'price': 300, 'name': 'house'}, 3: {'price': 300, 'name': 'flat'}, 4: {'price': 250, 'name': 'apartment'}}
2 голосов
/ 10 февраля 2020

У вас небольшая проблема с переменными.

В этом исправлении test_list - это весь список, ele - это ['1', '350', 'apartment'], а x - это одна строка из него.

[list(map(lambda x: int(x) if x.isdigit() else x, ele)) for ele in test_list]

но лучше использовать понимание списка вместо list(map(:

[[int(x) if x.isdigit() else x for x in ele] for ele in test_list]

Еще лучше: список диктов или список кортежей будет более уместным. Список, как правило, представляет собой набор элементов без указания c роли каждого из них.

[{'id': int(id), 'price': int(price), 'name': name} for id, price, name in test_list]

[(int(id), int(price), name) for id, price, name in test_list]

также помешает вам преобразовать третий элемент (имя в моем примере) в целое, если он был случайным образом называется "123".

1 голос
/ 10 февраля 2020

Попробуйте это:

test_list = [[int(ele) if ele.isdigit() else ele for ele in elem ] for elem in test_list]
...