2017-11-16 12 views
1

私は助けが必要です!私はリストに数字の束を持っているファイルを持っています。それは、このようなものになります。私は数字がリンクされている回数を確認する方法が必要ですファイルを読み込んで「友人」を追跡するコード

を...

たとえば、1は3と4にリンクされています。

wh ile 4は1と8にリンクされています

ヒント?今それは何も出力しない

with open(file_name) as friends: 
    network = [line.rstrip('\n') for line in friends] 
    d = defaultdict(list) 
    data = filter(lambda x:x, [list(re.findall('\d+', i)) for i in friends])      
    for a,b in data: 
     d[int(a)].append(int(b)) 

    print(dict(d)) 

Ajax1234の提案を使用してのよう

コード。ネットワーク印刷するとき

['0 1', '0 2', '0 3', '1 4', '1 6', '1 7', '1 9', '2 3', '2 6', '2 8', '2 9', '3 8', '3 9', '4 6', '4 7', '4 8', '5 9', '6 8', '7 8'] 
+0

この関係は対称ですか? 4が1にリンクされている場合、1は4にリンクされていますか? –

+0

はい、あなたは正しいです。数字を人と考えてください。だから1は4と友人になります。それは4も1と友人になることを意味します。 – Vcoss

答えて

4

をあなたはcollections.defaultdictを使用することができます。

from collections import defaultdict 
import re 
d = defaultdict(list) 
s = """ 
    0 1 
    1 3 
    4 8 
    4 1 
""" 
network = [list(map(int, re.findall('\d+', line.rstrip('\n')))) for line in friends][1:] #for removing the single first value. 
for a, b in network: 
    d[a].append(b) 

print(dict(d)) 

new_friend_lists = {a:b+[i for i in d if a in d[i]] for a, b in d.items()} 
for a, b in new_friend_lists.items(): 
    for i in b: 
     if i not in d: 
      d[i].extend([c for c, e in new_friend_lists.items() if i in e]) 
     d[a].append(i) 

final_list = {a:list(set(b)) for a, b in d.items()} 

あなたは上記の投稿、ファイルデータ出力に上記のコードを実行している場合、これが出力されます:

{0: [1, 2, 3], 1: [0, 9, 4, 6, 7], 2: [0, 8, 3, 6, 9], 3: [0, 8, 2, 9], 4: [8, 1, 6, 7], 5: [9], 6: [8, 1, 2, 4], 7: [8, 1, 4], 8: [2, 3, 4, 6, 7], 9: [1, 2, 3, 5]} 
+0

ありがとうD – Vcoss

+1

@Vcossこの回答があなたを助けたら、それを受け入れてください。ありがとう! – Ajax1234

+0

ファイルから読み込むようにコードを修正する必要がありましたが、現在は何も出力されません。私は自分の質問を編集して、私がしたことを見ることができます。 @ Ajax1234 – Vcoss

関連する問題