代码之家  ›  专栏  ›  技术社区  ›  Henry

使用Python将json重新格式化为键值对

  •  0
  • Henry  · 技术社区  · 2 年前

    我有一个JSON文件,如下所示:

    {"Africa":
        {
            "invitee_event_type_page":
            {
                "Total Events": "194"
            },
            "invitee_meeting_cancelled":
            {
                "Total Events": "9"
            }
        },
        "Asia":
        {
            "invitee_event_type_page":
            {
                "Total Events": "127"
            },
            "invitee_meeting_scheduled":
            {
                "Total Events": "16"
            }
        }
    }
    

    我正在尝试将其格式化,以便我按照以下内容进行操作:

    output = [{"Asia - invitee_event_type_page": 127, "Asia - invitee_meeting_scheduled":16, "Africa - invitee_event_type_page": 194,"Africa - invitee_meeting_cancelled":9}]
    

    我尝试了以下几点,但运气不太好。我对这一切都很陌生,我正在努力将其他答案的不同部分拼凑成连贯的东西。任何帮助都将不胜感激。

    import re
    import json
    
    with open("ga2.json", "r") as f:
        data =json.load(f)
    
    africa = (data)["Africa"]
    output=[]
    
    for key,value in africa.items():
        print(key,value["Total Events"])
        output= output+key,value["Total Events"]
    print(output)
    

    我得到TypeError:只能将列表(而不是“str”)连接到列表。

    1 回复  |  直到 2 年前
        1
  •  1
  •   Andrej Kesely    2 年前

    你可以使用dict理解来 output :

    dct = {
        "Africa": {
            "invitee_event_type_page": {"Total Events": "194"},
            "invitee_meeting_cancelled": {"Total Events": "9"},
        },
        "Asia": {
            "invitee_event_type_page": {"Total Events": "127"},
            "invitee_meeting_scheduled": {"Total Events": "16"},
        },
    }
    
    out = [
        {
            f"{k} - {kk}": int(vv["Total Events"])
            for k, v in dct.items()
            for kk, vv in v.items()
        }
    ]
    
    print(out)
    

    打印:

    [
        {
            "Africa - invitee_event_type_page": 194,
            "Africa - invitee_meeting_cancelled": 9,
            "Asia - invitee_event_type_page": 127,
            "Asia - invitee_meeting_scheduled": 16,
        }
    ]