2017-10-06 5 views
0

これはOK作品:タプルDICTする:: TypeError例外を:配列と辞書の更新シーケンス要素#0を変換することはできません

In [104]: i = [(1, 'a')] 
In [105]: dict(i) 
Out[105]: {1: 'a'} 

私が私が上のdict()関数を呼び出した1組を含むリストを持っているようですそれは辞書を返しました。

私が原因の呼び出しに変更されていない:

In [114]: i 
Out[114]: [(1, 'a')] 

私はこれをしようとした場合:

In [108]: i = (1, 'a') 
In [109]: dict(i) 

私はTypeError例外を取得:配列と辞書の更新シーケンス要素#0を変換することはできません。

これは、タプルが不変であるためと考えられます。本当なら、私は何も変えていない、そうですか?

上記の作業例では、iはまだiです。

答えて

0

を与えますメンバーがKeyとValueに割り当てることができる2メンバーの反復可能なメンバーではないため、(KeyとValue)、失敗します。

+0

それは私の混乱です。 2つのタプルは2つのメンバを持ち、反復可能なので、2つのメンバが繰り返されるようです。 1 => 'a' – jouell

+0

"iterable内の各項目は、それ自体正確に2つのオブジェクトを持つ繰り返し可能なものでなければなりません。 - あなたは、2メンバーiterablesの** iterable **を渡す必要があります。この外側のiterableには、1つの2-member iterableを含めることができますが、ただ1つの "裸の" 2-member iterableを渡すことはできません。 – Blorgbeard

+0

OKだから、「2タプルのタプルはdict()関数を満たしますが、2タプルはできません」というように、単純に1つの「裸」とすることができます。 (裸の2タプルがリストに入れられない限り)。 – jouell

0

dict()は、mapping object、またはキーと値のペアの繰り返し可能性(いずれも2要素の繰り返し可能でなければならない)のいずれかを渡すことを想定しています。

2タプルのリストは後者であり、1つの2タプルもどちらでもありません。

+0

ありがとうございました。 2タプルがどう動かないのか分かりません。これは2要素の反復可能で、key:valueに使用できます。少なくとも2つのタプルが必要ですか? – jouell

+0

これは単に 'dict'がどのように実装されたかではありません。これは、単一のキーと値のペアではなく、キーと値のペアの反復可能性を期待しています。 – Blorgbeard

+0

単一のキー:値を与えることはできますが、質問の最初の例のように、2つの繰り返し可能な層でラップする必要があります。 – Blorgbeard

0

dictは一連のシーケンスを必要とします。したがって、1次元のシーケンスにすると失敗します。リストの代わりにタプルを使用することができます。あなたが反復可能であるタプルを渡しているので、Pythonが2でメンバーを拡大しようとし、それを反復さ

class dict(**kwarg)

class dict(mapping, **kwarg)

class dict(iterable,**kwarg)

Return a new dictionary initialized from an optional positional argument and a possibly empty set of keyword arguments.

If no positional argument is given, an empty dictionary is created. If a positional argument is given and it is a mapping object, a dictionary is created with the same key-value pairs as the mapping object. Otherwise, the positional argument must be an iterable object. Each item in the iterable must itself be an iterable with exactly two objects. The first object of each item becomes a key in the new dictionary, and the second object the corresponding value. If a key occurs more than once, the last value for that key becomes the corresponding value in the new dictionary.

If keyword arguments are given, the keyword arguments and their values are added to the dictionary created from the positional argument. If a key being added is already present, the value from the keyword argument replaces the value from the positional argument.

d = dict(((1, 1), (2, 2))) 

はPythonドキュメント(link)から私たちに

{1: 1, 2: 2} 
+0

tks。 TypeError:ほとんどの引数が1つしかないと予想され、2つのw/python 2または3が得られます。 – jouell

+1

'd = dict(((1,1)、(2、2)))' - 一番外側の集合は関数呼び出し括弧です。 – Blorgbeard

+0

Great.Slightly confusingなぜタプルでラップされた2タプルがうまくいかないのですか?しかし、今私たちは雑草にいると思うし、それが上のように実施された方法だ。 – jouell

関連する問題