繁体   English   中英

从另一个 JSON 数据的 For 循环 with.append() 生成的列表

[英]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中的每个项目,选择键GROUPTYPE以形成字典 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM