2017-09-05 154 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