4

我需要为嵌套字典中的每个项目添加一个值增加一的键。我一直在尝试使用该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

... 等等。

使用它,您可以不断增加要在dicts中使用的值

希望这可以帮助

于 2012-07-07T02:12:27.433 回答