我从.c读取输入的.csv文件。它包含用户名和一些其他用户信息。
一个用户可能会被列出多次,因此我想列出列表中一个用户的所有元素。
所以,我的代码是:
import csv
with open('raw_input.csv', 'r') as f:
reader = csv.reader(f)
rawInput = list(reader)
concat = []
for elements in rawInput[1:]:
print(elements)
concat.append([elements[0], elements[1] + "_" + elements[2] + "_" + elements[3]])
concat
[['User 1', 'u1-c1_p1_1'],
['User 1', 'u1-c2_p2_2'],
['User 2', 'u2-c1_p1_3'],
['User 3', 'u3-c1_p2_4'],
['User 4', 'u4-c1_p3_1'],
['User 4', 'u4-c2_p4_6']]
它应该是这样的:
[['User 1', 'u1-c1_p1_1', 'u1-c2_p2_2'],
['User 2', 'u2-c1_p1_3'],
['User 3', 'u3-c1_p2_4'],
['User 4', 'u4-c1_p3_1', 'u4-c2_p4_6']]
答案 0 :(得分:1)
您非常接近解决方案。您需要的是defaultdict
:
from collections import defaultdict
import itertools
d = defaultdict(list)
for user, date in concat:
d[user].append(date)
final_data = [list(itertools.chain.from_iterable([[a], b])) for a, b in d.items()]
输出:
[['User 4', 'u4-c1_p3_1', 'u4-c2_p4_6'], ['User 3', 'u3-c1_p2_4'], ['User 2', 'u2-c1_p1_3'], ['User 1', 'u1-c1_p1_1', 'u1-c2_p2_2']]