这段Python代码怎么优化?

发布于 2022-09-12 13:26:22 字数 582 浏览 40 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我的鱼塘能养鲲 2022-09-19 13:26:23

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

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源码深度剖析

谁对谁错谁最难过 2022-09-19 13:26:23

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文