myjson = [
{"GROUP" : "A",
"TYPE" : "I",
"VALUE1" : 25,
"VALUE2" : 26,
"REMARK" : "None"},
{"GROUP" : "B",
"TYPE" : "II",
"VALUE1" : 33,
"VALUE2" : 22,
"REMARK" : "None"}
]
預期產出
[{'GROUP': 'A', 'TYPE': 'I'}, {'GROUP': 'B', 'TYPE': 'II'}]
我的方法
對于 中的每個專案myjson,選擇鍵GROUP并TYPE形成一個字典物件,并將這兩個字典物件附加到另一個串列中myjson2
temp = {}
myjson2 = []
for listitem in myjson:
for key, item in listitem.items():
if key == "GROUP" or key == "TYPE":
temp[key] = item
print(temp)
myjson2.append(temp)
以上print(temp)給出:
{'GROUP': 'A', 'TYPE': 'I'}
{'GROUP': 'B', 'TYPE': 'II'}
我想知道為什么每個.append().
print(myjson2)
[{'GROUP': 'B', 'TYPE': 'II'}, {'GROUP': 'B', 'TYPE': 'II'}]
uj5u.com熱心網友回復:
為什么不作業:您需要每次都附加新字典,而不是用新值覆寫舊字典。把那個溫度移到第一個里面for,
myjson = [
{
"GROUP": "A",
"TYPE": "I",
"VALUE1": 25,
"VALUE2": 26,
"REMARK": "None"
},
{
"GROUP": "B",
"TYPE": "II",
"VALUE1": 33,
"VALUE2": 22,
"REMARK": "None"
}
]
myjson2 = []
for listitem in myjson:
temp = {}
for key, item in listitem.items():
if key == "GROUP" or key == "TYPE":
temp[key] = item
myjson2.append(temp)
print(myjson2)
One-Liner:帶有串列理解
myjson2 = [{key:val for key, val in dic.items() if key in ['GROUP', 'TYPE']} for dic in myjson]
uj5u.com熱心網友回復:
您的問題是由temp在回圈之外定義一次引起的。
將定義移到第一個內部,for以便我們為串列中的每個專案清除它:
myjson2 = []
for listitem in myjson:
temp = {}
for key, item in listitem.items():
if key == "GROUP" or key == "TYPE":
temp[key] = item
print(temp)
myjson2.append(temp)
print(myjson2)
{'GROUP': 'A', 'TYPE': 'I'}
{'GROUP': 'B', 'TYPE': 'II'}
[{'GROUP': 'A', 'TYPE': 'I'}, {'GROUP': 'B', 'TYPE': 'II'}]
在線嘗試!
uj5u.com熱心網友回復:
這是因為temp保持對同一個字典物件的參考,而您在里面所做的for key, item in listitem.items()實際上是更改字典的值,并且由于 is 的最后一個值,listitem最終{'GROUP': 'B', 'TYPE': 'II'}將temp具有這些鍵值。您可以通過在每次新迭代中參考temp新物件來簡單地解決此問題
for listitem in myjson:
temp = {}
for key, item in listitem.items():
if key == "GROUP" or key == "TYPE":
temp[key] = item
print(temp)
myjson2.append(temp)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/416653.html
標籤:
