4

ネストされたディクショナリ内の項目ごとに値が 1 ずつ増加するキーを追加する必要があります。構文を使用しようとしましdict['key']='value'たが、ネストされた辞書で機能させることができません。とてもシンプルだとおもいます。

私の辞書:

mydict={'a':{'result':[{'key1':'value1','key2':'value2'},
                        {'key1':'value3','key2':'value4'}]}}

これは、辞書の主要部分にキーを追加するコードです。

for x in range(len(mydict)):
        number = 1+x
        str(number)
        mydict[d'index']=number

print mydict
  #out: {d'index':d'1',d'a'{d'result':[...]}}

角括弧内の小さな辞書に新しいキーと値を追加したい:

{'a':{'result':[{'key1':'value1',...,'index':'number'}]}}

の最後の行にレイヤーを追加しようとするとfor loop、トレースバック エラーが発生します。

Traceback (most recent call last):
  File "C:\Python27\program.py", line 34, in <module>
    main()
  File "C:\Python27\program.py", line 23, in main
    mydict['a']['result']['index']=number
TypeError: list indices must be integers, not unicode

ネストされたアイテムをリストするさまざまな方法を試しましたが、喜びはありません。誰か助けてくれませんか?

4

2 に答える 2

12

問題はmydict、ネストされた辞書の単なるコレクションではないということです。リストも含まれています。定義を分割すると、内部構造を明確にするのに役立ちます。

dictlist = [{'key1':'value1','key2':'value2'},
            {'key1':'value3','key2':'value4'}]
resultdict = {'result':dictlist}
mydict = {'a':resultdict}

したがって、最も内側の値にアクセスするには、これを行う必要があります。逆方向に作業する:

mydict['a'] 

を返しますresultdict。次にこれ:

mydict['a']['result']

を返しますdictlist。次にこれ:

mydict['a']['result'][0]

の最初のアイテムを返しますdictlist。最後に、これ:

mydict['a']['result'][0]['key1']

戻り値'value1'

したがって、forループを修正して、を正しく反復する必要がありますmydict。おそらくもっと良い方法がありますが、ここに最初のアプローチがあります:

for inner_dict in mydict['a']['result']: # remember that this returns `dictlist`
    for key in inner_dict:
        do_something(inner_dict, key)
于 2012-07-07T02:25:55.247 に答える
0

あなたが何をしようとしているのか完全にはわかりませんが、itertools.countここで役立つと思います.

>>> c = itertools.count()
>>> c.next()
0
>>> c.next()
1
>>> c.next()
2
>>> c.next()
3

... 等々。

dictこれを使用すると、 sで使用する値をインクリメントし続けることができます。

お役に立てれば

于 2012-07-07T02:12:27.433 に答える