这段Python代码怎么优化?

originData = { 'a': None, 'b': None, 'c': 5, list: [{ 'a': 1, 'b': None}], dict: { 'a': 1, 'b':None}}

def remove_none(data):
  if type(data) == dict:
    for k in list(data.keys()):
      if type(data[k]) == dict or type(data[k]) == list:
        remove_none(data[k])
      elif data[k] == None:
        del data[k]
  elif type(data) == list:
    for v in data:
      if type(v) == dict or type(v) == list:
        remove_none(v)
      elif v == None:
        data.remove(v)

IDE报复杂度过高,请问要如何优化呢?
函数的目的是去除字典originData中的None值,Python版本是3.6

阅读 2k
2 个回答

如果是我,应该会这么写:

originData = { 'a': None, 'b': None, 'c': 5, 'list': [{ 'a': 1, 'b': None}], 'dict': { 'a': 1, 'b':None}}

def remove_none(data):
    if isinstance(data, dict):
        return {
            k: remove_none(v)
            for k, v in data.items()
            if v is not None
        }
    elif isinstance(data, list):
        return [
            remove_none(v)
            for v in data
            if v is not None
        ]
    else:
        return data

print(remove_none(originData))

不做就地修改,利用字典和列表推荐简化程序处理逻辑。

想知道编写优雅Python代码的秘密?请关注我的专栏:Python源码深度剖析

首先不能在 循环时 对列表进行remove

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题