首页 > 解决方案 > 从请求的正文中删除具有“无”值的键

问题描述

使用 Python 的requests包,我有一个 POST 的主体,其中包含一堆None值,例如(字典,而不是 JSON):

{
  'name': 'John',
  'surname': None,
  'somelist': [
    {
      'a': 1,
      'b': None
    },
    {
      'a': None,
      'b': 2
    }
  ],
  'otherdict': {
    'c': False,
    'd': None
  }
}

我希望发送出去的实际正文中的所有条目都None删除了值,而不是转换为 JSON null

{
  'name': 'John',
  'somelist': [
    {
      'a': 1
    },
    {
      'b': 2
    }
  ],
  'otherdict': {
    'c': False
  }
}

包裹是否requests有执行此操作的选项,或者我是否需要最终执行此操作?

标签: pythonpython-requests

解决方案


您可以使用递归来执行此操作(删除带有值的键,或者如果值不是,则None递归调用该方法):cleanNone

def clean(d):
    if type(d) == list:
        return [clean(e) for e in d]
    elif type(d) == dict:
        for k, v in list(d.items()):
            if v is None:
                del d[k]
            else:
                d[k] = clean(v)
    return d

print(clean(data))

输出

{'somelist': [{'a': 1}, {'b': 2}], 'otherdict': {'c': False}, 'name': 'John'}

推荐阅读