[英]List generated from For loop with .append() of another JSON data
myjson = [
{"GROUP" : "A",
"TYPE" : "I",
"VALUE1" : 25,
"VALUE2" : 26,
"REMARK" : "None"},
{"GROUP" : "B",
"TYPE" : "II",
"VALUE1" : 33,
"VALUE2" : 22,
"REMARK" : "None"}
]
预期 output
[{'GROUP': 'A', 'TYPE': 'I'}, {'GROUP': 'B', 'TYPE': 'II'}]
我的方法
对于myjson
中的每个项目,选择键GROUP
和TYPE
以形成字典 object 和 append 这两个字典 object 到另一个列表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'}]
您的问题是由于在循环之外定义了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'}]
为什么不工作:您每次都需要 append 新字典,而不是用新值覆盖旧字典。 只需将温度移到第一个内部即可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]
这是因为temp
保持对同一个字典 object 的引用以及您在里面for key, item in listitem.items()
本质上是更改字典的值,并且由于listitem
的最后一个值是{'GROUP': 'B', 'TYPE': 'II'}
, temp
最终会有这些键值。 您可以通过在每次新迭代中将temp
引用到新的 object 来简单地解决此问题
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.