1

すぐにはわからない場合は、私はネットチュートリアルを介して学習している初心者です。

さまざまな長さのdictのdictをループして、結果をテーブルに入れようとしています。空の値が存在する可能性のあるテーブルに「nothing」を入れたいのですが。

私は次のコードを試しています:

import os

os.system("clear")

dict1 = {'foo': {0:'a', 1:'b', 3:'c'}, 'bar': {0:'l', 1:'m', 2:'n'}, 'baz': {0:'x', 1:'y'} }
list1 = []
list2 = []
list3 = []

for thing in dict1:
    list1.append(dict1[thing][0])
print list1

for thing in dict1:
    list2.append(dict1[thing][1])
print list2

for thing in dict1:
    if dict1[thing][2] == None:
        list3.append('Nothing')
    else:
        list3.append(dict1[thing][2])

次の出力/エラーが表示されます。

['x', 'a', 'l']
['y', 'b', 'm']
Traceback (most recent call last):
  File "county.py", line 19, in <module>
    if dict1[thing][2] == None:
KeyError: 2

dictで空の値を参照するにはどうすればよいですか?

ありがとう!

4

3 に答える 3

6

を使用しget()ます。デフォルトでは、None

val = dict1[thing].get(2)

または、デフォルトにするものを指定するには、次のようにします。

val = dict1[thing].get(2, 'nothing')

このように、キーが存在するかどうかに関係なく、フォールバックとして有効な「何も」を取得できません。

for thing in dict1:
    list3.append(dict1[thing].get(2, 'Nothing'))
于 2012-08-28T19:03:38.360 に答える
5

inまたはnot in演算子を使用して、キーの存在を確認する必要があります。

if 2 not in dict[thing]:
    # do something

Noneまたは、フォールバックとして本当に必要な場合は、次を使用し.get()ます。

val = dict[thing].get(2)
if val is None:
    # do something

また、将来的には、is Noneと比較するときに使用する必要がありますNone

于 2012-08-28T19:04:20.497 に答える
0

演算子を使用して存在しないキーにアクセスしようとすると、[]常に。が返されKeyErrorます。メソッドを使用dict.get(key, default)してデフォルトパラメータで指定された値を返すか、ディクショナリがブロックでアクセスしtry/except、exceptブロックでKeyError例外をキャッチし、代わりに「Nothing」をリストに追加することができます。

于 2012-08-28T19:07:14.247 に答える