假设我在python中有一个表格,格式如下:
id1 V1 100
id1 V2 200
id1 V3 0
id2 V1 300
id2 V2 400
id2 V3 1
我希望转换为以下格式:
id1 100 200 0
id2 300 400 1
V1,V2和V3是变量名,我不需要保留它们。我只需要id和每个变量的值。变量数(Vs)也是未知的,但变量的顺序始终相同。我正在寻找一种更智能的转换方式而不是循环方式。有没有内置功能?
答案 0 :(得分:3)
没有其他内置方法,但您可以使用dict进行分组:
from collections import defaultdict
d = defaultdict(list)
s = """id1 V1 100
id1 V2 200
id1 V3 0
id2 V1 30
id2 V2 400
id2 V3 1"""
for a, _, c in map(str.split, s.splitlines()):
d[a].append(c)
print(["{},{}".format(k,",".join(v)) for k,v in d.items()]
['id2,30,400,1', 'id1,100,200,0']
如果您希望输出很好地对齐,您可以执行this
之类的操作如果您想维护订单,请使用OrderedDict:
from collections import OrderedDict
d = OrderedDict()
s = """id1 V1 100
id1 V2 200
id1 V3 0
id2 V1 30
id2 V2 400
id2 V3 1"""
for a, _, c in map(str.split, s.splitlines()):
d.setdefault(a, []).append(c)
如果它在文件中,您可以使用csv lib解析它:
import csv
from collections import OrderedDict
d = OrderedDict()
with open("in.txt") as f:
for k, _, v in csv.reader(f, delimiter=" "):
d.setdefault(k, []).append(v)
OrderedDict输出:
OrderedDict([('id1', ['100', '200', '0']), ('id2', ['30', '400', '1'])])