这是我的代码
def increase_by_one(d):
for key, value in d.items():
if d[value] == type(int): ## There is an error here
d[value] = d[value] + 1
else:
d[key] += 1
return d
我不确定是什么问题。但我确信这是if d[value] == type(int)
错了。我怎样才能改变它?
输入
increase_by_one({'a':{'b':{'c':10}}})
输出
{'a':{'b':{'c':11}}}
输入
increase_by_one({'1':2.7, '11':16, '111':{'a':5, 't':8}})
输出
{'1':3.7, '11':17, '111':{'a':6, 't':9}}
答案 0 :(得分:1)
从previous post开始,我的答案已修复,以提供您想要的解决方案:
def increase_by_one(d):
for key in d:
try:
d[key] += 1
except TypeError:
d[key] = increase_by_one(d[key])
return d
每次尝试将1添加到字典时,都会引发TypeError
。既然你知道你正在处理嵌套字典,那么你再次调用你的函数。这称为递归。
>>> increase_by_one({'a':{'b':{'c':10}}})
{'a': {'b': {'c': 11}}}
>>> increase_by_one({'1':2.7, '11':16, '111':{'a':5, 't':8}})
{'1': 3.7, '11': 17, '111': {'a': 6, 't': 9}}
答案 1 :(得分:1)
首先使用isinstance()
和iteritems()
for key, value in d.iteritems():
if isinstance(value,int):
...
但是当你处理嵌套的dicts时,这是不可能的。要么使用递归,要么你知道你的dict的深度,首先做一个像isinstance(value,dict)
答案 2 :(得分:0)
您正在按值编制索引,但是您应该使用该密钥而不需要从字典中获取值,因为您已经在使用items()
:
def increase_by_one(d):
for key, value in d.items():
if type(value) == int:
d[key] = value + 1
else:
increase_by_one(value) # if you want recursion
return d