2017-09-05 156 views
0

我有一个.csv文件,我从中读取输入。它包含用户名和其他一些用户信息。Python合并名单与列表中的常见元素

一个用户可能被列出多次,所以我想列出一个用户列表中的所有元素。

所以,我的代码是这样的:

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

哪里是你企图在合并?提示:使用'defaultdict(list)' – Julien

回答

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']] 
+0

谢谢。正是我所期待的。 :) – Imsa

+0

@Imsa很乐意帮忙! – Ajax1234