蟒蛇。修改未知深度的字典中的值

时间:2013-03-22 21:52:41

标签: python dictionary

假设我有一个看起来像这样的列表,但可能会有不同的深度和复杂性:

inc = {'root': 10, 
    'values': {
         'left': {8: {
             'left': {
                 6: {
                    'left': 5, 
                    'right': 11}
                  }, 
             'right': {
                  10: {
                     'left': 2, 
                     'right': 11}
               }}}, 
         'right' : {
                  12: {
                     'left': 5, 
                     'right': 20}
                  }}}

我需要做的是遍历它,找到最左边的值和最左边的值(即通过访问字典的'left'元素达到的值)并交换它们。递归遍历字典以查找值不是问题。问题是在确定需要更改的内容后找到必要的值。

用于迭代的函数:

leftmost = 0
lowest = 0

def walk_dict(d):
    global leftmost, lowest

    for k,v in sorted(d.items()):
        if isinstance(v, dict):
            walk_dict(v)
        else:
            if k == 'left':
                if leftmost == 0:
                    leftmost = v
                if v < lowest:
                    lowest = v

1 个答案:

答案 0 :(得分:1)

不要直接保留值,而是让词典保持它们,这样你就可以在最后交换值,例如:

[in the loop]
  if k == 'left':
    if not leftmost:
      leftmost = d
    if v < lowest['left']:
      lowest = d

# swap
lefmost['left'], lowest['left'] = lowest['left'], lefmost['left']

此外,我不确定你对最左边的定义,但是如果它意味着最深的密钥等于“left”,那么你的代码就错了,因为它只是抓住了第一个找到的值。深度优先遍历。要解决这个问题,您可以保持当前深度并进行比较,以确定是否应覆盖最左边的值。