我有一个要导入字典的元组列表。这些元组由两个字符串组成。我想将这些元组转换为整数。即
myList = ['0,1', '0,2', '0,3']
结果列表应为:
resList = [(0,1), (0,2), (0,3)]
我尝试使用:
list(map(int, myList))
但这似乎不起作用。
答案 0 :(得分:4)
您可以使用eval
函数来获取元组,如下所示。在python2和python3中都可以使用。
>>> myList = ['0,1', '0,2', '0,3']
>>> list(map(eval, myList))
[(0, 1), (0, 2), (0, 3)]
答案 1 :(得分:3)
您还需要用','
分割字符串。
>>> [tuple(map(int, s.split(','))) for s in myList]
[(0, 1), (0, 2), (0, 3)]
另一种选择是使用csv
模块。
>>> import csv
>>> list(csv.reader(myList))
[['0', '1'], ['0', '2'], ['0', '3']]
>>> [tuple(map(int, row)) for row in csv.reader(myList)]
[(0, 1), (0, 2), (0, 3)]
如果结果的内部元素不是元组并且它们的类型为int
,那么并不是很重要,我们可以将csv
解决方案简化为
>>> list(csv.reader(myList, quoting=csv.QUOTE_NONNUMERIC))
[[0.0, 1.0], [0.0, 2.0], [0.0, 3.0]]
〜编辑〜
thelogicalkoan's answer让我想起ast.literal_eval
,它在这里提供了最优雅(最安全)的解决方案。
>>> from ast import literal_eval
>>> [literal_eval(x) for x in myList]
[(0, 1), (0, 2), (0, 3)]
答案 2 :(得分:1)
另一种解决方案是使用ast.literal_eval
(而不是eval
,它可能被认为是不安全的):
>>> import ast
>>> ast.literal_eval('0,1')
(0, 1)
因此,您可以这样做:
>>> my_list = ['0,1', '0,2', '0,3']
>>> result = [ast.literal_eval(x) for x in my_list]
>>> result
[(0, 1), (0, 2), (0, 3)]
答案 3 :(得分:1)
str.partition可用于执行此操作。
>>> [(int(x), int(y)) for x, _, y in (z.partition(',') for z in myList)]
[(0, 1), (0, 2), (0, 3)]
生成器表达式(z.partition(',') for z in myList)
在列表的每个元素上生成str.partition
的输出,然后在所需的部分上调用int
。
答案 4 :(得分:0)
这是另一种选择:
myList = ['0,1', '0,2', '0,3']
def tSet(list):
return tuple([int(i) for i in list])
resList = [tSet(i.split(",")) for i in myList]
print(resList) #Output: [(0, 1), (0, 2), (0, 3)]