2017-10-24 5 views
-3

は私のような繰り返しのキーや複数の値のペアのリストを持っている:Pythonで複数のキーとペアの辞書を作成するには?

abc abc.txt 
abc abc-xyz.jpg 
abc abc.978.png 
efg efg.txt 
efg efg-xyz.jpg 
efg efg.978.png 

は、私はこのような辞書を作成します。

dict = {'abc':'["abc.txt", "abc-xyz.jpg", "abc.978.png"]', 'efg':'["efg.txt", "efg-xyz.jpg", "efg.978.png"]'}

は、私はこれについてどのように行くのですか?

+0

はSOへようこそ。時間をかけて[ask]とそれに含まれるリンクを読んでください。 – wwii

答えて

2

defaultdictを使用すると、これを簡単に行うことができます。

from collections import defaultdict 
lines = string.split('\n') 
d = defaultdict(list) 
for line in lines: 
    key, value = line.split(' ') 
    d[key].append(value) 
2

各キーを空のリスト[]で初期化してから、新しい項目を追加するときにappendを使用する必要があります。

list = """abc abc.txt 
abc abc-xyz.jpg 
abc abc.978.png 
efg efg.txt 
efg efg-xyz.jpg 
efg efg.978.png""" 

dict = {} 

for line in list.split('\n'): 
    (key, value) = line.split(' ') 
    if not key in dict: 
     dict[key] = [] 
    dict[key].append(value) 

print(dict) 
0

あなたはitertools.groupbyを使用することができます:

import itertools 
s = ['abc abc.txt', 'abc abc-xyz.jpg', 'abc abc.978.png', 'efg efg.txt', 'efg efg-xyz.jpg', 'efg efg.978.png'] 
new_s = [i.split() for i in s] 
new_data = {a:[d for c, d in list(b)] for a, b in itertools.groupby(sorted(new_s, key=lambda x:x[0]), key=lambda x:x[0])} 

出力:例えば

{'abc': ['abc.txt', 'abc-xyz.jpg', 'abc.978.png'], 'efg': ['efg.txt', 'efg-xyz.jpg', 'efg.978.png']} 
+0

これは、データがソートされている場合にのみ機能します。 –

+0

@ juanpa.arrivillagaそれを指摘してくれてありがとう。私の最近の編集を見てください。 – Ajax1234

関連する問題