我想为字典中的每个值添加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:{ }}
答案 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