2017-06-21 14 views
-1

Pythonでは、文字列と2つの値を持つリストを辞書に変換して、キーが文字列で、その値がリストのリストであるようにするにはどうすればいいですか?各リストの最初の値がキーです。strとリストのリストをdictに変換する

たとえば、私が持っている現在のリストがある:

['A', ['A', 1], 'B', ['B',1], ['B',2], 'C', ['C', 1], ['C',2], ['C',3]] 

と私は辞書をしたい:

{'A': [['A', 1]], 'B': [['B',1], ['B',2]], 'C': [['C',1], ['C',2], [ 'C'、3]]}

ありがとうございます。

EDIT:文字列に続くリストの数は任意です。

+0

あなたは何をしようとしましたか? – depperm

+0

私はちょうどキーと初期値0で辞書を作成しようとしましたが、私が望むものに辞書を効率的に埋め込むことはできません。 –

+0

私たちがあなたを助けるためにコードを共有してください – gmuraleekrishna

答えて

2

これで、リストの順番にかかわらず、それはあなたが探しているものを正確に選択します。

def new(list_): 
    new_dic = {x:[y for y in list_ if type(y) == list and y[0] == x] for x in list_ if type(x) == str} 
    print(new_dic) 

new(['A', ['A', 1], ['A',2], 'B', ['B',1], ['B',2], 'C', ['C', 1], ['C',2]]) 
0
d = {l: [] for l in mylist if type(l) is str} 

for l in mylist: 
    if type(l) is list: 
     d[l[0]].append(l) 
+0

リストの最初の値がキーと一致するかどうかを評価しなかったため、値は空のリストです。 –

+0

実際には、リストの最初の値が辞書内のキーと一致しない場合に 'KeyError'を取得します。すべてのリストが追加されるかどうかわからない場合にこの例外をキャッチできます。 –

0

あなたは文字列値は、あなたのリストにあるかは重要ではありませんように思えるdefaultdict

from collections import defaultdict 
my_dict = defaultdict(list) 
my_list = ['A', ['A', 1], ['A',2], 'B', ['B',1], ['B',2], 'C', ['C', 1], ['C',2]] 
for index in my_list: 
    if len(index) > 1: 
     my_dict[index[0]].append(index) 
0

試すことができます。提供されたリストの現在の構造、および必要な出力に基づいて、あなただけのリストリスト内のをチェックすることができる、とdefaultdict構文を使用することにより、あなたは単純にそれに応じて辞書を作ることができます。

from collections import defaultdict 

l = ['A', ['A', 1], 'B', ['B',1], ['B',2], 'C', ['C', 1], ['C',2], ['C',3]] 

d = defaultdict(list) 
for data in l: 
    if type(data) is list: 
     d[data[0]].append(data) 

出力:

defaultdict(<class 'list'>, {'A': [['A', 1]], 'C': [['C', 1], ['C', 2], ['C', 3]], 'B': [['B', 1], ['B', 2]]}) 

だから、ここでは、defaultdictはそのデフォルトのコレクションのリストを値としてかかります。したがって、新しいキーを追加する場合、デフォルト値はリストになります。リストを反復処理するときは、リスト内のデータのタイプを確認するだけです。 listが見つかったら、そのリストの最初の値をキーとして辞書に挿入し、そのリストを値として追加します。それはあなたが探している出力を与える必要があります。

+0

私はTypeErrorを取得しています:最初の引数は呼び出し可能かNoneでなければなりません。 –

+0

@ Mat.S私の答えにコードを貼り付けてコピーしても問題ありません。あなたはどんな情報を提供していますか? – idjaw

+0

@ Mat.S defaultdict(list)のリストは、標準のタイプ 'list'であり、既に初期化されたリストではありません。 – rodgdor

関連する問題