2016-09-15 27 views
-3

私は以下のようなPythonのリストを持っている:リストから複数の値を持つPython辞書を作成するには?

['Phylum_C3.30', 'CDgu97FdFT6pyfQWZmquhFtiKrL1yp', 'pAnstdjgs3Dzzc8I0fOLERPeXNZIuT_legend', 'pAnstdjgs3Dzzc8I0fOLERPeXNZIuT', 'Family_E3.30', 'iKUmlH47RuphW3NbqXykn0ayizhztF', 'ZzTzTLMDCHIkPBo9waDG3lBZi6u2hG_legend', 'ZzTzTLMDCHIkPBo9waDG3lBZi6u2hG', 'Class_C2.60', 'D0RRB3F0dCl39KuEZNqfdD8q9jKzUu', 'MYe9hzd8BTeg1OW00TMQQ0qc60KWIH_legend', 'MYe9hzd8BTeg1OW00TMQQ0qc60KWIH'] 

私はキーが「Pylum」または「クラス」または「注文」または「家族」または「属で始まる任意の要素となり、辞書を持っていたいです値は、その要素に続くすべての値が 'Pylum'または 'Class'または 'Order'または 'Family'または 'Genus'を持つ次の要素まで続きます。例えばのために

最終辞書は次のようになります。

{ 
    "Phylum_C3.30": [ 
     'CDgu97FdFT6pyfQWZmquhFtiKrL1yp', 
     'pAnstdjgs3Dzzc8I0fOLERPeXNZIuT_legend', 
     'pAnstdjgs3Dzzc8I0fOLERPeXNZIuT' 
    ], 
    "Family_E3.30": [ 
     'iKUmlH47RuphW3NbqXykn0ayizhztF', 
     'ZzTzTLMDCHIkPBo9waDG3lBZi6u2hG_legend', 
     'ZzTzTLMDCHIkPBo9waDG3lBZi6u2hG' 
    ], 
    "Class_C2.60": [ 
     'D0RRB3F0dCl39KuEZNqfdD8q9jKzUu', 
     'MYe9hzd8BTeg1OW00TMQQ0qc60KWIH_legend', 
     'MYe9hzd8BTeg1OW00TMQQ0qc60KWIH' 
    ], 
} 
+1

予想される出力はPythonでは無効です。おそらく* lists *を値として辞書を作成したいですか?まだ何か試しましたか? –

答えて

2

リストの上に単純にループし、もしほとんどの最近の 'キーが見られるように、キーストアとして値テスト、そのキーの辞書に辞書を追加します。そして、他のすべての非キー値のために関連付けられたリストに追加最後に見たのキー:

prefixes = ('Pylum', 'Class', 'Order', 'Family', 'Genus') 
output = {} 
current_key = None 
for elem in inputlist: 
    if any(elem.startswith(p) for p in prefixes): 
     # this is a key, add it to the output 
     current_key = elem 
     if current_key not in output: 
      output[current_key] = [] 
    else: 
     output[current_key].append(elem) 

あなたは鍵がビットを処理される方法を微調整することができます。 if current_key not in outputを削除すると、前のエントリを上書きする重複エントリが発生します。重複するエントリがバグであると思われる場合は、if current_key in outputケースの例外を発生させることもできます。

+0

私によく見えます。私の唯一の提案は、おそらく最初の要素が有効なキーではない場合に 'current_key'がまだ' None'であるかどうかをチェックすることですが、入力を信頼すればおそらくこれを避けることができます。巨大なものではなく、 'None'キーを持つ辞書になります。 –

+0

@CurtisLusmore:キーを最初の要素として持つことはバグではないので、チェックしないと、そのケースに対する無料の例外が与えられます。 'None'をキーとする辞書にはなりません。代わりに 'KeyError'を取得します –

関連する問題