修改字典中的值

时间:2014-03-26 08:51:43

标签: python

我想为字典中的每个值添加1

def increase_by_one(d):
    d = {}
    for value in d:
        d[value] = d[value] + 1

这是我的代码,当我尝试print(increase_by_one({'first':27, 'second':16, 'third':8})时,我没有得到,但我想是{'first':28, 'second':17, 'third':9}

我的代码也适用于此案例increase_by_one({2:{ }, 3:{ }, 4:{ }}),它将返回{2:{ }, 3:{ }, 4:{ }}

3 个答案:

答案 0 :(得分:2)

您收到None因为您的函数没有返回任何内容,而且每次进入函数时都会覆盖d

通过返回d修复此问题。

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

>>> increase_by_one({'first':27, 'second':16, 'third':8})
{'first': 28, 'second': 17, 'third': 9}

如果您有嵌套词典,例如:

{'first':27, 'second':16, 'third':8, 'fourth': {'fifth': 28, 'sixth': {'seventh': 29}}}

然后你将不得不递归到每个子词典。一种常见的方法是使用recursion。迭代版本必须尝试向值添加1,捕获异常,输入字典,再次尝试......等等。

答案 1 :(得分:1)

d = {}使您的参数引用一个新的空dict,并且您的函数不返回任何内容。您需要返回修改后的dict才能进行打印工作:

def increase_by_one(d):
    ...:     for key in d:
    ...:         d[key] = d[key] + 1
    ...:     return d

print(increase_by_one({'first':27, 'second':16, 'third':8}))
{'second': 17, 'third': 9, 'first': 28}

答案 2 :(得分:1)

def add_to_values(d, n=1):
    """Recursively adds n to dictionary values, if possible (in-place)"""
    for key, value in d.items():
        if isinstance(value, dict):
            add_to_values(value, n)
        else:
            try:
                d[key] += n
            except TypeError:
                continue