python - 我无法处理列表中的键

标签 python python-3.x


我尝试处理字典中的键,但是当函数到达列表时,没有任何反应,我该如何解决这个问题?我究竟做错了什么?

此时我的函数返回:

{
  'KEY1': 1,
  'KEY2': 2,
  'KEY3': {
    'KEY4': {
      'KEY5': [{
        'key6': 3,
        'key7': {
          'key8': 4
        }
      }]
    }
  }
}

但是我的函数应该返回:

{
  'KEY1': 1,
  'KEY2': 2,
  'KEY3': {
    'KEY4': {
      'KEY5': [{
        'KEY6': 3,
        'KEY7': {
          'KEY8': 4
        }
      }]
    }
  }
}


obj = {
  'key1': 1,
  'key2': 2,
  'key3': {
    'key4': {
      'key5': [{
        'key6': 3,
        'key7': {
          'key8': 4
        }
      }]
    }
  }
}

def rec_keys(node, case = 'uppercase'):
    output = {}

    for key in node.keys():
        if case == 'lowercase':
            new_key = key.lower()
        elif case == 'uppercase':
            new_key = key.upper()

        if isinstance(node[key], dict):
            output[new_key] = rec_keys(node[key], case)
        else:
            output[new_key] = node[key]

    return output

print(rec_keys(obj))

offtop:stackoverflow 要求我添加更多信息,但我没有什么可添加的

最佳答案

你可以使用类似的东西:

def change_keys(obj, func="upper"):

    if func == "upper":
         func = lambda x : x.upper()
    elif func == "lower":
        func = lambda x : x.lower()

    if isinstance(obj, dict):
        new = {}
        for k, v in obj.items():
            new[func(k)] = change_keys(v, func)
    elif isinstance(obj, list):
        new = []
        for v in obj:
            new.append(change_keys(v, func))
    else:
        return obj
    return new

print(change_keys(obj, "upper"))

# {'KEY1': 1, 'KEY2': 2, 'KEY3': {'KEY4': {'KEY5': [{'KEY6': 3, 'KEY7': {'KEY8': 4}}]}}}

Demo

关于python - 我无法处理列表中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60466240/

相关文章:

python更改UDPServer中的最大限制接收缓冲区

python - Pygame 多颗子弹不产生

Python 图像处理线程

python - 在 ipython 中模拟 dreampie

python - 使用 Python 通过 http 输出图像时出现问题

python - 如何保持时间戳的毫秒分量,即使它的值为零?

Python时间限制

python-3.x - OpenCV 分类器检测火车(铁路运输)

Python:简洁的属性

python - 在 BeautifulSoup 中解析 MS 特定的 html 标签