迭代嵌套字典

时间:2017-04-05 12:37:40

标签: python dictionary nested

我试图创建一个函数increase_by_one,它接受​​字典并通过将字典中的所有值增加1来修改字典。函数应保持所有键不变,最后返回修改后的字典。如果字典为空,则返回它而不更改。 (字典可以嵌套)

例如

increase_by_one({'1':2.7, '11':16, '111':{'a':5, 't':8}})

会给出

{'1': 3.7, '11': 17, '111': {'a': 6, 't': 9}}

我不知道如何为多个(和未知的数字)嵌套的dicitionaries做这件事。谢谢。希望代码尽可能简单

5 个答案:

答案 0 :(得分:2)

这是使用递归和字典理解解决问题的简单方法:

def increase_by_one(d):
    try:
        return d + 1
    except:
        return {k: increase_by_one(v) for k, v in d.items()}

如果除了可以添加的数字或其他字典之外,dict中包含值,则可能需要进一步的类型检查。

答案 1 :(得分:1)

假设值是数字或字典,您可以考虑:

def increase_by_one(d):
  for key in d:
    if type(d[key])==dict:
      d[key] = increase_by_one(d[key])
    else:
      d[key] += 1
  return d

您输入:

print(increase_by_one({'1':2.7, '11':16, '111':{'a':5, 't':8}}))

我得到了:

{'1': 3.7, '11': 17, '111': {'a': 6, 't': 9}}

答案 2 :(得分:1)

def increase_by_one(d):
  for key in d:
    try:
      d[key] += 1
    except:  # cannot increase, so it's not a number
      increase_by_one(d[key])
  return d  # only necessary because of spec

答案 3 :(得分:0)

$delimiter = "hal";
$text = "hal today is a beatiful weather hal whats going on hal super";
$arr = explode($delimiter, $text);
if count($arr) > 0) {
    $result = $arr[count($arr) - 1)];
} else {
    $result = '';
}

使用重复

答案 4 :(得分:0)

dict的就地修改:

def increase_by_one(my_dict):
    for k, v in my_dict.items():
        if any(isinstance(v, x) for x in (float, int)):
            my_dict.update({k: v + 1})
        elif isinstance(v, dict):
            my_dict.update({k: increase_by_one(v)})
    return my_dict

v = {'1': 2.7, '11': 16, '111': {'a': 5, 't': 8}}
print(increase_by_one(v))  # prints: {'111': {'a': 6, 't': 9}, '1': 3.7, '11': 17}