修改嵌套字典中的值

时间:2014-03-26 10:12:40

标签: python

这是我的代码

def increase_by_one(d):
    for key, value in d.items():
        if d[value] == type(int): ## There is an error here
            d[value] = d[value] + 1
        else:
            d[key] += 1
    return d

我不确定是什么问题。但我确信这是if d[value] == type(int)错了。我怎样才能改变它?

输入

increase_by_one({'a':{'b':{'c':10}}})

输出

{'a':{'b':{'c':11}}}

输入

increase_by_one({'1':2.7, '11':16, '111':{'a':5, 't':8}})

输出

{'1':3.7, '11':17, '111':{'a':6, 't':9}}

3 个答案:

答案 0 :(得分:1)

previous post开始,我的答案已修复,以提供您想要的解决方案:

def increase_by_one(d):
    for key in d:
        try:
            d[key] += 1
        except TypeError:
            d[key] = increase_by_one(d[key])
    return d

每次尝试将1添加到字典时,都会引发TypeError。既然你知道你正在处理嵌套字典,那么你再次调用你的函数。这称为递归。

>>> increase_by_one({'a':{'b':{'c':10}}})
{'a': {'b': {'c': 11}}}

>>> increase_by_one({'1':2.7, '11':16, '111':{'a':5, 't':8}})
{'1': 3.7, '11': 17, '111': {'a': 6, 't': 9}}

答案 1 :(得分:1)

首先使用isinstance()iteritems()

for key, value in d.iteritems():

    if isinstance(value,int):
        ...

但是当你处理嵌套的dicts时,这是不可能的。要么使用递归,要么你知道你的dict的深度,首先做一个像isinstance(value,dict)

这样的检查

答案 2 :(得分:0)

您正在按值编制索引,但是您应该使用该密钥而不需要从字典中获取值,因为您已经在使用items()

def increase_by_one(d):
    for key, value in d.items():
        if type(value) == int:
            d[key] = value + 1
        else:
            increase_by_one(value) # if you want recursion
    return d