2015-11-11 49 views
-4

我有一個文本文件中包含行:
ID1 ID2
ID1 ID3
ID1 ID4
ID2 ID1
ID2 ID3
ID2 ID4
ID3 ID1
ID3 ID2
ID3 ID4
ID4 ID1
ID4 ID2
ID4 ID3
ID5 ID6
ID5 ID7
ID6 ID5
ID6 ID7
ID7 ID5
ID7 ID6
.....找到所有鏈接的ID與各行的文本文件有兩個被鏈接的ID

我想找到所有鏈接的ID:
[ ID1,ID2,ID3,ID4],[ID5,ID6,ID7]

我在Python中有點新。你能分享一下如何解決這個問題嗎?

非常感謝!

+0

你到目前爲止嘗試過什麼,你是如何從文本文件到該列表? – SirParselot

+0

我對使用unix命令行更有信心。所以,我通過剪切和排序uniq等獲得了ID ... – crazyhottommy

+0

因此,您只需要第二列中的唯一ID? – SirParselot

回答

0

確定這是不是最好的蟒蛇,但因爲你是新的它會告訴你,你可以在未來使用的一些基本概念:

ld = {} # basic dictionary 
# now open & read file 
with open('linked_id.txt') as fin: 
    for ln in fin: # process each line in the file 
     k, v = ln.split() # split each line eg. k = 'ID1', v = 'ID2' 
     # make a dictionary entry - setdefault puts the k(ey) in and 
     # in this case set the value to a list, append then adds to 
     # the list by k(ey) 
     ld.setdefault(k, []).append(v) 

unq = [] # start an empty list 
for k, v in ld.items(): # process the dictionary elements 
    v.append(k) # make the value list include the key 
    ll = sorted(v) # sort the new list 
    if not ll in unq: # see if its in the unq (unique) list 
     unq.append(ll) # if not add it 

print(unq) # show the unique sets 

現在有各種各樣的庫函數可以使用,但這將完成工作

+0

感謝您的詳細腳本和評論!我能理解得很好。對我來說唯一的新東西是字典的setdefault方法。再次感謝你幫助像我這樣的新手。 – crazyhottommy