Key-Valueタプルのリストを辞書に変換する方法は?


125

次のようなリストがあります。

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

それを次のような辞書に変えたいです。

{'A': 1, 'B': 2, 'C': 3}

これに対処する最良の方法は何ですか?

編集:タプルの私のリストは実際にはもっと似ています:

[(A, 12937012397), (BERA, 2034927830), (CE, 2349057340)]

1
それらのエンティティのどのようなAB(またはBERA)およびC(またはCE)実際にありますか?ありがとう
食べる

以下の実際の例で発生するエラーは、タプルのリストがない彼に関連しているが、2つのタプルに分けたい非常に長いリストに関連していることは間違いありません。
gddc

回答:


90

これは私にリストを分割してそれを圧縮しようとするのと同じエラーを私に与えます。ValueError:辞書更新シーケンス要素#0の長さは1916です。2が必要です

それがあなたの実際の質問です。

答えは、あなたのリストの要素はあなたが彼らが思っているものではないということです。入力myList[0]すると、リストの最初の要素が2タプルではなく、たとえば('A', 1)1916長の反復可能であることがわかります。

元の質問()で述べた形式のリストを実際に作成したら、あとmyList = [('A',1),('B',2),...]は必要ですdict(myList)


おかげで、リストがどうやってそのようになったのかはわかりませんが、ゼロから作り直した後、修正することができました。
Fred Wilson

1
@DJ_Stuffy_K:(コンテキストがこの質問と無関係であると想定)一般に、それが不必要だったりプログラムの速度が低下したりしない限り、暗黙的に構築している抽象的なデータ構造への有用なインデックスとして辞書を作成することは完全に問題ありません。「良い習慣」の概念は完全に状況に依存します。キーのO(1)ルックアップ時間が必要ですか?また、「リストを辞書に変換」することもできません。それは完全に意味論に依存します。例[(1,2), (1,3)]-> {1:3}キーを破壊して情報を失う!dictは、O(1)挿入/削除時間との1対*の関係です。リストはリストです。
ninjagecko

162
>>> dict([('A', 1), ('B', 2), ('C', 3)])
{'A': 1, 'C': 3, 'B': 2}

5
同じことを示唆する別の回答についてもコメントしました。これは、重複するタプル「キー」を持つことをカバーl=[('A',1), ('B',2), ('C',3), ('A', 2)]して'A': 1いません。
2016年

32

これを試しましたか?

>>> l=[('A',1), ('B',2), ('C',3)]
>>> d=dict(l)
>>> d
{'A': 1, 'C': 3, 'B': 2}

ValueError:辞書更新シーケンス要素#0の長さは1916です。2が必要
Fred Wilson、

それは私のターミナルからのストレートカットアンドペーストだったので、うまくいくはずです。そのエラーを取得するために何をしたか正確に示すことができますか?
役に立たない

@フレッド、あなたは何かを打ち間違えたに違いない、この答えは結構です。
martineau

@FredWilsonこれは、次のようなことを試みると通常発生するエラーですdict([string1, string2, string3, string4])
chacham15

2
これは、重複するタプル「キー」を持つことをカバーしません。例:l=[('A',1), ('B',2), ('C',3), ('A', 2)]結果'A': 1として、望ましい結果ではない可能性があります。
2016年

10

重複したタプル「キー」を処理する方法は次のとおりです。

# An example
l = [('A', 1), ('B', 2), ('C', 3), ('A', 5), ('D', 0), ('D', 9)]

# A solution
d = dict()
[d [t [0]].append(t [1]) if t [0] in list(d.keys()) 
 else d.update({t [0]: [t [1]]}) for t in l]
d

OUTPUT: {'A': [1, 5], 'B': [2], 'C': [3], 'D': [0, 9]}

驚くばかり!私を助けた。
unpairestgood

素晴らしい!、
たくさん

2

辞書内包表記を使用する別の方法、

>>> t = [('A', 1), ('B', 2), ('C', 3)]
>>> d = { i:j for i,j in t }
>>> d
{'A': 1, 'B': 2, 'C': 3}

2

タプルにキーの繰り返しがない場合、それは単純です。

tup = [("A",0),("B",3),("C",5)]
dic = dict(tup)
print(dic)

タプルにキーの繰り返しがある場合。

tup = [("A",0),("B",3),("C",5),("A",9),("B",4)]
dic = {}
for i, j in tup:
    dic.setdefault(i,[]).append(j)
print(dic)

1
l=[['A', 1], ['B', 2], ['C', 3]]
d={}
for i,j in l:
d.setdefault(i,j)
print(d)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.