我在更新字典時遇到問題。我只是在每個鍵中提取某些欄位 - 但輸出并不如預期。資料、預期輸出和代碼如下。感謝您的觀看,感謝您的任何評論
categories = {'categories_a1' : [{'group': '13GH9', 'number': '1'},{'group': '17KPO', 'number': '73'}, {'group': '26BN11', 'number': '2'}, {'group': '813W', 'number': '99'}],
'categories_a2' : [{'group': '99ITY', 'number': '12'},{'group': 'JH871', 'number': '15'}, {'group': 'OLH83', 'number': '99'}, {'group': '44RTQ', 'number': '1'}]}
xpected= {'categories_a1' : [{'13GH9': '1'},{'17KPO':'73'}, {'26BN11':'2'}, {'813W': '99'}],
'categories_a2' : [{'99ITY':'12'},{'JH871': '15'}, {'OLH83': '99'}, {'44RTQ':'1'}]}
out={}
for k in categories.keys():
for i in categories[k]:
x = {k: v for k, v in zip([i['group']], [i['number']])}
out[k] = x
out.update(out)
uj5u.com熱心網友回復:
讓我們首先清理一些普遍的奇怪之處:
out.update(out)
這一行實際上什么都不做,應該被省略。
x = {k: v for k, v in zip([i['group']], [i['number']])}
這毫無意義;我們創建每個串列一個元素并并行迭代它們。我們可以很容易地只需直接使用這些值:x = {i['group']: i['number']}。
交換后,讓我們考慮導致實際問題的部分:
for i in categories[k]:
x = {i['group']: i['number']}
out[k] = x
這里的問題是您想out[k]構成一個包含所有修改過的字典的串列,但是x被重復分配這些字典中的一個,然后結果變為out[k]。您可能打算做的是反復將這些字典附加到一個新的空串列中:
x = []
for i in categories[k]:
x.append({i['group']: i['number']})
out[k] = x
但是,很明顯您已經熟悉并熟悉了推導式,這是使用推導式的理想場所:
out[k] = [{i['group']: i['number']} for i in categories[k]]
而且,當然,我們可以將此技術擴展到整個回圈:
out = {
k: [{i['group']: i['number']} for i in v]
for k, v in categories.items()
}
請仔細研究此代碼的結構,并確保您了解該技術。我們有一個源字典,我們想要轉換它來創建我們的輸出,規則是:鍵保持不變,值(它是一個串列)經歷自己的轉換。因此,我們首先撰寫 dict 理解的骨架,.items()用于為我們提供鍵值對:
out = {
k: # we need to fill in something to do with `v` here
for k, v in categories.items()
}
然后我們弄清楚我們對這個值做了什么:串列的每個元素都是一個字典;我們處理串列的方式是迭代的(輸入串列的每個元素告訴我們一個要在輸出串列中使用的元素),但這些元素的處理不是(我們從該字典中查看兩個硬編碼的值,并從他們那里做出決定)。給定i串列的一個元素dict,我們想要的對應元素正好有一個鍵值對,我們可以計算為{i['group']: i['number']}。所以我們換一個串列理解周圍的:[{i['group']: i['number']} for i in v]; 然后我們將它插入到 dict 理解框架中,給我們最終的結果。
uj5u.com熱心網友回復:
一種方法:
for key, value in categories.items():
categories[key] = [{ d["group"] : d["number"] } for d in value]
print(categories)
輸出
{'categories_a1': [{'13GH9': '1'}, {'17KPO': '73'}, {'26BN11': '2'}, {'813W': '99'}], 'categories_a2': [{'99ITY': '12'}, {'JH871': '15'}, {'OLH83': '99'}, {'44RTQ': '1'}]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/365736.html
上一篇:如何矢量化這個熊貓操作?
