首页 > 解决方案 > 通过字典列表的键重新编码值

问题描述

我有一个 json 对象,它是一个字典列表,它来自一个 api。我正在寻找在将 json 的某些键插入数据库之前更改它们的值。该列表如下所示:

[
  {
    'id': 1,
    'sex': 'Female'
    'status': 'Active'
  },
  {...},
]

json 总是显示所有的键。我想更改整数键的字符串值,因为它适合数据库模型:

[
  {
    'id': 1,
    'sex': 2
    'status': 1
  },
  {...},
]

我能够使用.update('key': recode_fun)或遍历整个列表来更改一个字典项,但是如果没有几个循环(循环遍历范围、列表和字典),我不知道如何做到这两者。我正在尝试使用辅助函数来做到这一点:

def recode_sex(value):
    return {
      'Male': 1,
      'Female': 2,
    }.get(value, value)

由于有多个键值需要更新并希望保持循环可读。

标签: python

解决方案


您不需要字典列表,而是字典字典。就像是:

code_table = {
  'sex':
    {'Male': 1,
     'Female': 2
    },
  'status':
    {'Active': ...
    },
  ...
}

然后,您可以使用简单的理解构建重新编码的列表:

recoded = [{k: code_table.get(k, {v: v})[v] for k,v in d.items()} for d in data]

推荐阅读