【问题标题】:How to project data in a particular table format?如何以特定表格格式投影数据?
【发布时间】:2022-01-13 02:46:08
【问题描述】:

JSON/字典数据

data = {"outer_level_key": [{
        "random1": "",
        "url": "",
        "software": [{
            "name": "a123",
            "version": "some_version_a123"
        }],
        "memory": 72,
    },
    {
        "random1": "",
        "url": "",
        "software": [{
                "name": "a456",
                "version": "some_version_a456"
            },
            {
                "name": "a789",
                "version": "some_version_a789"
            },
            {
                "name": "b123",
                "version": "some_version_b123"
            }
        ],
        "memory": 500
    }}

我想以以下格式打印所有可用数据nameversion

++++++++++++++++++++++
name.   | version.    |
+++++++++++++++++++++++
+ a123.  |some_version_a123|
+---------------------------
+ a456.  | some_version_a456|
+----------------------------

任何更好的可读性表会更好。你能帮帮我吗?

【问题讨论】:

    标签: python python-3.x dictionary


    【解决方案1】:

    这是一种方法。

    (i) 遍历data并收集相关数据并使用dict.setdefault将它们合并到key上以创建out

    (ii) 将 out 从 (i) 传递给 DataFrame 构造函数。

    out = {}
    for outer_dict in data['outer_level_key']:
        for inner_dict in outer_dict['software']:
            for k, v in inner_dict.items():
                out.setdefault(k, []).append(v)
    df = pd.DataFrame(out)
    

    输出:

       name            version
    0  a123  some_version_a123
    1  a456  some_version_a456
    2  a789  some_version_a789
    3  b123  some_version_b123
    

    【讨论】:

    • 谢谢恩克。这很完美,我尝试过这种熊猫方法。任何带有表格设计和边框的东西(只是为了突出这些特定数据)?
    • @Learner 是的,您可以玩弄桌子设计。您可以在docs 中了解更多信息
    【解决方案2】:

    我认为这是你想要的:

    # main.py
    print("++++++++++++++++++++++")
    print("name.   | version.    |")
    print("++++++++++++++++++++++")
    
    for softwares in data["outer_level_key"]:
        for software in softwares["software"]:
            print(f"+ {software['name']}  | {software['version']}|")
            print("+---------------------------")
    
    

    输出:

    ++++++++++++++++++++++
    name.   | version.    |
    ++++++++++++++++++++++
    + a123  | some_version_a123|
    +---------------------------
    + a456  | some_version_a456|
    +---------------------------
    + a789  | some_version_a789|
    +---------------------------
    + b123  | some_version_b123|
    +---------------------------
    

    【讨论】:

    • 这很聪明 :),谢谢。但是调整桌子的设计和宽度很多都不是用这个来实现的。
    【解决方案3】:

    也可以这样做。

    data_dict = {
        "outer_level_key": [
            {
                "random1": "",
                "url": "",
                "software": [{
                    "name": "a123",
                    "version": "some_version_a123"
                }],
                "memory": 72,
            },
            {
                "random1": "",
                "url": "",
                "software": [
                    {
                        "name": "a456",
                        "version": "some_version_a456"
                    },
                    {
                        "name": "a789",
                        "version": "some_version_a789"
                    },
                    {
                        "name": "b123",
                        "version": "some_version_b123"
                    }
                ],
                "memory": 500
            }]
    }
    print(f"{'name':<8}  | {'version':<20}")
    print(f"{'-' * 9:<8} + {'-' * 20:<20}")
    for software_dict in data_dict['outer_level_key']:
        for software in software_dict["software"]:
            print(f"{software['name']:<8}  | {software['version']:<20}")
    
    

    输出:

    name      | version             
    --------- + --------------------
    a123      | some_version_a123   
    a456      | some_version_a456   
    a789      | some_version_a789   
    b123      | some_version_b123  
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-23
      • 2014-02-21
      • 2021-11-13
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      相关资源
      最近更新 更多