在python词典中添加

时间:2014-03-28 10:46:32

标签: python

我应该在字典中添加每个值,使其增加1。

def increasee(d):
    for i in d.values():
        if i == { } :
            return d
        else:
            for k in d.keys():
                d[k] += 1
            return d

这说明d.values为空时以及该键只包含一个整数但是当字典中有字典时,如

increase({'a':{'b':{'c':16}}})
{'a':{'b':{'c':17}}}

我应该使用嵌套循环吗?或者我应该使用递归?

非常感谢

4 个答案:

答案 0 :(得分:2)

您不需要处理空字典,因为for k循环不会迭代。

要处理嵌套字典,请使用递归:

def increase(d):
    for key in d:
        if isinstance(d[key], dict):
            increase(d[key])
        else:
            d[key] += 1
    return d

这会直接遍历字典的键(不需要在这里调用.keys();字典本身是可迭代的。)

您也在改变字典就地;真的,没有必要在这里归还任何东西。无论如何,我为你保留了一个外return d,以便返回最外面的字典;忽略递归调用的返回值。

演示:

>>> def increase(d):
...     for key in d:
...         if isinstance(d[key], dict):
...             increase(d[key])
...         else:
...             d[key] += 1
...     return d
... 
>>> increase({'a':{'b':{'c':16}}})
{'a': {'b': {'c': 17}}}

答案 1 :(得分:0)

由于你不知道dict的深度,你应该去递归:

def increase(d):
    for i in d.values():
        if i == {} :
            return d
        else:
            for k in d.keys():
                if type(d[k]) is dict:
                    increase(d[k])
                else:
                    d[k] += 1
            return d

print increase({'a':{'b':{'c':16}}})

请注意,此代码仅作为示例提供。当其中一个值不是数字时,它将失败。例如,这会引发错误:

increase({'a':{'b':{'c':'some text'}}})

答案 2 :(得分:0)

递归适用于这种情况。

def dict_inc(d):
    for k, v in d.items():
        if isinstance(v, dict):
            dict_inc(v)
        elif isinstance(v, int):
            d[k] += 1

答案 3 :(得分:0)

这是一个制作副本的版本:

def increased(d):
    if isinstance(d, dict):
        return { k: increased(v) for k, v in d.iteritems() }
    else:
        return d + 1
>>> d = {'a': {'b': {'c': {}, 'd': 1}}}
>>> increased(d)
{'a': {'b': {'c': {}, 'd': 2}}}
>>> d
{'a': {'b': {'c': {}, 'd': 1}}}