2011-05-08 10 views
9

dict関数を使用してリストを辞書に変換しようとしています。dict関数の問題

inpu = input.split(",") 
dic = dict(inpu) 

上記のコードは、文字列を取得しようとsplitそれを','に、その後私は、辞書にリストを変換するdict機能を使用しています。

しかし、私はこのエラーを取得:

ValueError: dictionary update sequence element #0 has length 6; 2 is required

誰も助けることができますか?

+0

することは私たちに与えますあなたのインプットの例、そしてあなたが何が起こるかを説明してください。 – NPE

+0

'dict'の代わりに' set'を使いたいかもしれません。 –

答えて

17

dictは、(タプルのリストのような)2要素のコンテナの反復可能性を期待しています。アイテムのリストを渡すだけでは、キーと値が分かりません。

あなたはこれをやろうとしている。

>>> range(10) 
<<< [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> dict(range(10)) 
--------------------------------------------------------------------------- 
TypeError: cannot convert dictionary update sequence element #0 to a sequence 

dictは、このようなリストを期待:

>>> zip(lowercase[:5], range(5)) 
<<< 
[('a', 0), 
('b', 1), 
('c', 2), 
('d', 3), 
('e', 4)] 

タプルの最初の要素がキーとなり、第二の値になります。

>>> dict(zip(lowercase[:5], range(5))) 
<<< 
{'a': 0, 
'b': 1, 
'c': 2, 
'd': 3, 
'e': 4} 
0

ディクショナリとは、キーと値を照合するために長さ2のリストが必要な理由です。入力をフラットなリストに分割しています。そのため、Pythonはこのケースで不平を言っています。キーとして何を指定するのか、値として何を指定するのかはわかりません。

2

Python Data structuresに記載されています。 dict()コンストラクタは、タプルとして格納されたキーと値のペアのリストから直接辞書を構築します。サイズは

のでinpu配列は、各位置で(「キー」、「値」)の形式でなければなりません、例えば

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]) 
{'sape': 4139, 'jack': 4098, 'guido': 4127} 

ご入力配列は、おそらく2以上である