2016-09-12 4 views
2

おはよう、pythonは2つのリストに基づいてネストされたディレクトリを作成します

これは簡単かもしれませんが、私はちょうどpythonから始まっています。学習のために:

person = ['mama.a','mama.b', 'mama.c', 
     'mama.d', 'papa.a', 'papa.b'] 
kind = ['a', 'b', 'c', 'd'] 
combined = {} 

# GOAL: 
# {'mama': {'a': [], 'c': [], 'b': [], 'd': []}, 'papa': {'a': [], 'c': [], 'b': [], 'd': []}} 

for human in [i.split('.')[0] for i in person]: 
    combined[human] = {} 
    for attrib in kind: 
     combined[human][attrib] = [] 

答えて

0

何名のsetをすることについて: はこれより二つのリストに基づいて、ネストされた辞書を作成する「クリーン」な方法がありますです。あなたはそれぞれをdictに一度だけ追加しようとします。

combined = {} 
for n in set(p.split('.')[0] for p in person): 
    combined[n] = {k:[] for k in kind} 

これはおそらく、モンスターワンライナーでネストdict理解に作ることができます。私はそれが読むのは簡単だろうとは思わないが。

またはsetを別の行に分割することができます。それはその後になります

pset = set(p.split('.')[0] for p in person) 
pdict = {p: {k: [] for k in kind} for p in pset} 

ここで、2行目は@Faiz Haldesの答えと同じです。

+0

Paulありがとうございました。これは私に素晴らしい方法を示しました。 –

3
{p.split('.')[0]: {k: [] for k in kind} for p in person} 
+0

Faizに感謝します。最小限のあなた;) –

+0

は、読みやすさと簡潔さの境界を越えることは非常に簡単です、私はあなたが常に可読性を持つことをお勧めします。 –

0
combined = {x.split('.')[0]:{i:[] for i in kind} for x in person} #if you require no check as to whether mama or papa contain a, b, c, or d 
print combined 

neutral = {i.split('.')[0]:[n.split('.')[1] for n in person if n.split('.')[0] == i.split('.')[0]] for i in person} #if you require a check 
combined = {k:{v:[] for v in neutral[k]} for k in neutral} 
print combined 
関連する問題