修改字典中的值

1 投票
3 回答
3552 浏览
提问于 2025-04-17 23:57

我想给字典里的每个值都加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}) 来打印结果时,得到的是None,但我应该得到的是 {'first':28, 'second':17, 'third':9}

另外,我的代码能否在这种情况下工作 increase_by_one({2:{ }, 3:{ }, 4:{ }}),这样会返回 {2:{ }, 3:{ }, 4:{ }}

3 个回答

1

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能在使用一个特定的功能时,发现它并没有按照预期工作。这种情况下,查看其他人的经验和解决方案就显得特别重要。

在社区网站上,比如StackOverflow,很多人会分享他们遇到的问题和解决方法。通过阅读这些内容,我们可以学习到很多实用的技巧和知识,帮助我们更好地理解和使用编程工具。

总之,遇到问题时,不要害怕寻求帮助,看看别人是怎么解决类似问题的,这样可以让我们少走很多弯路。

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
1

d = {} 这行代码会让你的参数指向一个新的空字典(dict)。而你的函数不会返回任何东西。如果想让打印(print)有效果,你需要返回修改过的字典:

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

你得到一个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}}}

那么你需要递归地进入每个子字典。一个常见的方法是使用递归。而如果用迭代的方法,就得尝试给值加1,捕捉异常,然后进入字典,再尝试一次……这样反复进行。

撰写回答