Python 字符串 2d 列表到混合 int/string 列表

Python string 2d list to mixed int/string list

得到这个列表:

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 ] 

但似乎没有用。

你的变量有一个小问题。

在此修复中,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]

更好:字典列表或元组列表会更合适。列表通常是元素的集合,每个元素没有特定的作用。

[{'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”,也会阻止您将其转换为整数。

如果您已经知道每个子列表的位置都是正确的,为什么还要使用地图

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'}}

试试这个:

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