[英]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.