首页 文章

在python中向嵌套字典添加新密钥

提问于
浏览
2

我需要为嵌套字典中的每个项添加一个值增加1的键 . 我一直在尝试使用 dict['key']='value' 语法,但可以't get it to work for a nested dictionary. I'确定它非常简单 .

我的词典:

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

我已经尝试了各种不同的方式列出嵌套项目但没有快乐 . 有人可以帮我从这里出去吗?

2 回答

  • 0

    我想尝试做,但我认为 itertools.count 能够在这里提供帮助 .

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

    ... 等等 .

    使用此方法,您可以继续增加要在 dict 中使用的值

    希望这可以帮助

  • 8

    问题是 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)
    

相关问题