【问题标题】:Appending list inside JSON object在 JSON 对象中附加列表
【发布时间】:2021-11-08 21:07:38
【问题描述】:

这是我的字典格式:

quest_attr = {
    "questions": [
        {
            "Tags": [
                {
                    "tagname": ""
                }
            ],
            "Title": "",
            "Authors": [
                {
                    "name": ""
                }
            ],
            "Answers": [
                {
                    "ans": ""
                }
            ],
            "Related_Questions": [
                {
                    "quest": ""
                }
            ]
        }
    ]
}

我想添加"Tags" 列表,结果将是:

    "questions":[
        {
            "Tags": [
                {"tagname":"#Education"}, {"tagname":"#Social"}
            ], 
            remaining fields...
        }

其余字段可以假定为空。我想在"questions" 主列表中添加多个问题。

我正在使用此代码,但结果与预期不符。

ind=0
size=len(tags)
while ind<size:
    quest_attr["questions"].append({["Tags"].append({"tagname":tags[ind]})})
    ind=ind+1

如果我维护一个用于循环遍历问题列表的变量,例如:

quest_attr["questions"][ind]["Tags"].append({"tagname":tags[ind]

它给出了索引超出范围的错误。我该怎么办?

【问题讨论】:

  • JSON 与此无关。你有一个 Python 数据结构;不管是从 JSON 创建还是最终序列化为 JSON。
  • 那么,遇到字典怎么办。之后我必须转储这个字典,这就是为什么我必须确保遵循 JSON 格式。
  • for quest in quest_attr["questions"]: quest["Tags"] = [{'tagname': tag} for tag in tags]?

标签: python json python-3.x list dictionary


【解决方案1】:

请不要把 dict 和 list 弄得一团糟,就像你的代码一样。 这里我推荐一个更简单的部署。

    quest_attr = {
            'questions': {
                    "Tags":[],
                    "Title":"",
                    "Authors":[],
                    "Answers":[],
                    "Related_Questions":[]
            }
    }   
    
    
    tags = [ {"tagname":"#Education"},{"tagname":"#Social"} ] 

    quest_attr["questions"]['Tags'] += tags
    
    print(quest_attr)

【讨论】:

  • 我也试过了。基本上,我必须在 JSON 中转储这个字典,然后再次加载它以供进一步使用。我讨厌这种格式,因为它很乱,正如你所指出的那样。但这是我客户的要求。
【解决方案2】:

似乎索引变量ind 仅用于遍历标记列表。以附加结构的方式,您的循环将尝试将下一个标签附加到问题列表中的下一个问题,而不是将其余标签添加到同一个问题。

如果您要将相同的集合添加到多个问题,则需要分别循环遍历问题列表,同时将标签的 append 语句嵌套在另一个循环中。另一方面,如果您只想定位一个问题,只需使用索引号 [0] 在这种情况下。

这样的事情可能会更好,但更多的上下文会有所帮助:

for question in quest_attr["questions"]:
    for tag in tags:
        question["Tags"].append({"tagname":tag})

【讨论】:

    猜你喜欢
    • 2017-11-17
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2021-12-30
    • 2013-02-22
    • 1970-01-01
    • 2020-12-19
    • 2020-04-18
    相关资源
    最近更新 更多