拆分为列表列表,并将其特定元素转换为python中的整数

时间:2018-10-15 04:32:23

标签: python

假设我们有一个字符串:

A = "John\t20\nChris\t30\nAby\t10\n"

我想使A成为列表的列表,并且第一个元素仍然为str,第二个元素转换为int

我所做的是:

A = [[lambda k,v: str(k), int(v) for k, v in s.split('\t')] for s in A.split('\n')]

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

您只需获取不带lambda的值:

[[s.split('\t')[0], int(s.split('\t')[1])] for s in A.strip().split('\n')]

注意:添加strip()可以解析出尾随的'\ n'。

答案 1 :(得分:1)

我认为您过于复杂了。您根本不需要匿名函数。

首先,使用split字符串,然后在结果列表中对两组进行迭代,然后将对中的第二个元素转换为int

第二部分,itertools documentation有一个名为 grouper 的食谱。您可以复制粘贴该功能,也可以从more_itertools(需要安装)中导入该功能。

>>> from more_itertools import grouper
>>>
>>> a = "John\t20\nChris\t30\nAby\t10\n"
>>> [(s, int(n)) for s, n in grouper(2, a.split())]
[('John', 20), ('Chris', 30), ('Aby', 10)]

最后,如果要展平结果,请应用itertools.chain

>>> list(chain.from_iterable((s, int(n)) for s, n in grouper(2, a.split())))
['John', 20, 'Chris', 30, 'Aby', 10]

答案 2 :(得分:0)

如果您想使用lambda,这是一种更简单的方法;

L = lambda s: [s.split('\t')[0], int(s.split('\t')[1])]
A3 = [L(x) for x in A.strip().split('\n')]