我应该在字典中添加每个值,使其增加1。
def increasee(d):
for i in d.values():
if i == { } :
return d
else:
for k in d.keys():
d[k] += 1
return d
这说明d.values为空时以及该键只包含一个整数但是当字典中有字典时,如
increase({'a':{'b':{'c':16}}})
{'a':{'b':{'c':17}}}
我应该使用嵌套循环吗?或者我应该使用递归?
非常感谢
答案 0 :(得分:2)
您不需要处理空字典,因为for k
循环不会迭代。
要处理嵌套字典,请使用递归:
def increase(d):
for key in d:
if isinstance(d[key], dict):
increase(d[key])
else:
d[key] += 1
return d
这会直接遍历字典的键(不需要在这里调用.keys()
;字典本身是可迭代的。)
您也在改变字典就地;真的,没有必要在这里归还任何东西。无论如何,我为你保留了一个外return d
,以便返回最外面的字典;忽略递归调用的返回值。
演示:
>>> def increase(d):
... for key in d:
... if isinstance(d[key], dict):
... increase(d[key])
... else:
... d[key] += 1
... return d
...
>>> increase({'a':{'b':{'c':16}}})
{'a': {'b': {'c': 17}}}
答案 1 :(得分:0)
由于你不知道dict
的深度,你应该去递归:
def increase(d):
for i in d.values():
if i == {} :
return d
else:
for k in d.keys():
if type(d[k]) is dict:
increase(d[k])
else:
d[k] += 1
return d
print increase({'a':{'b':{'c':16}}})
请注意,此代码仅作为示例提供。当其中一个值不是数字时,它将失败。例如,这会引发错误:
increase({'a':{'b':{'c':'some text'}}})
答案 2 :(得分:0)
递归适用于这种情况。
def dict_inc(d):
for k, v in d.items():
if isinstance(v, dict):
dict_inc(v)
elif isinstance(v, int):
d[k] += 1
答案 3 :(得分:0)
这是一个制作副本的版本:
def increased(d):
if isinstance(d, dict):
return { k: increased(v) for k, v in d.iteritems() }
else:
return d + 1
>>> d = {'a': {'b': {'c': {}, 'd': 1}}}
>>> increased(d)
{'a': {'b': {'c': {}, 'd': 2}}}
>>> d
{'a': {'b': {'c': {}, 'd': 1}}}