簡體   English   中英

通過字典列表的鍵重新編碼值

[英]Recodifying values by key of a list of dictionaries

我有一個 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)

由於有多個鍵值需要更新並希望保持循環可讀。

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

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]

如果您已經有了輔助函數,那么您只需要遍歷列表中的每一項並修改所有的鍵值對:

for i in list:
    i['key'] = recode_key(i['key'])
    i['anotherkey'] = recode_anotherkey(i['key'])
    i['yetanotherkey'] = recode_yetanotherkey(i['key'])

您需要遍歷列表一次,觸摸您需要的所有鍵,並且您的輔助函數確保您不會更新鍵兩次或使用其他值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM