2

これはPythonのIDLE2のコードであり、エラーが発生します。

各「data」要素をキーと値「otro」として整然と含める必要があります。さて、「data」と「otro」は38文字列のリストで、「dik」は辞書です。

>>> for i in range(len(otro)+1):
    dik[dato[i]] = otro[i]  

Traceback (most recent call last):
  File "<pyshell#206>", line 2, in <module>
    dik[dato[i]] = otro[i]
IndexError: list index out of range
>>> 

この問題はrange(0、38)出力->(0、1,2,3 ... 37)であり、すべて厄介です

4

2 に答える 2

12

私は次のようなものだと思います:

dik = dict(zip(dato,otro))

少しきれいです...


dikすでに存在し、更新している場合:

dik.update(zip(dato,otro))

について知らない場合はzip、少し時間をかけて学習する必要があります。とても便利です。

a = [ 1 , 2 , 3 , 4 ]
b = ['a','b','c','d']
zip(a,b)   #=>   [(1,'a'),(2,'b'),(3,'c'),(4,'d')] #(This is actually a zip-object on python 3.x)

zipさらに引数を取ることもできます(zip(a,b,c))。たとえば、3タプルのリストが表示されますが、ここでの説明ではそれほど重要ではありません。

これは、dict「コンストラクター」(型)がkey-valueペアのセットを初期化するのが好きなことの1つです。それぞれの最初の要素tupleはでkeyあり、2番目の要素はvalueです。

于 2012-11-24T02:01:03.850 に答える
10

エラーはこれに起因します:range(len(otro)+1)。を使用する場合、上限値は実際には繰り返されないため、たとえば、rangeと言うと、繰り返しが行われます。ここで、positionは要素です。次に、そのリスト要素を取得して言った場合、最終は、になります。これは、ご覧のとおり、エラーの原因になります。range(5)0, 1, 2, 3, 454for i in range(len(nums)+1): print nums[i]ilen(nums) + 1 = 6

何かを反復処理するためのより「Pythonic」な方法lenは、リストのを使用しないことです。リスト自体を反復処理し、必要に応じて次を使用してインデックスを引き出しますenumerate

In [1]: my_list = ['one', 'two', 'three']

In [2]: for index, item in enumerate(my_list):
   ...:     print index, item
   ...:
   ...:
0 one
1 two
2 three

これをあなたのケースに適用すると、次のように言うことができます。

>>> for index, item in enumerate(otro):
...    dik[dato[index]] = item 

ただし、Pythonicityテーマを維持すると、@mgilson'szipがこの構成のより良いバージョンです。

于 2012-11-24T01:57:10.490 に答える