修改字典中的值
我想给字典里的每个值都加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,捕捉异常,然后进入字典,再尝试一次……这样反复进行。