【问题标题】:How to convert a nested dict to dict-of-lists?如何将嵌套的 dict 转换为 dict-of-lists?
【发布时间】:2021-06-02 11:02:16
【问题描述】:

我有一个包含多个嵌套字典的输入文件,如下所示:

input= {"md5": "36a4d23084085455409e4fc2c8655e47",
        "sha1": "13f24657a8823b5e076b841ab5dfa1db5aa3825d",
        "sha256": "fffaeb0de998f17d1e58bd1329241dc4181f6c8e367c6dae7d289dd52294538d",
        "av_labels": {"Avast": {"result": None},
                      "Avira": {"result": None},
                         .................
                      "Eset": {"result": "Trojan/Win32.Tepfer"}
                     }
       }
       

我必须将其转换为类似下面的内容才能在另一个程序中工作。

output= {"md5": "36a4d23084085455409e4fc2c8655e47",
         "sha1": "13f24657a8823b5e076b841ab5dfa1db5aa3825d",
         "sha256": "fffaeb0de998f17d1e58bd1329241dc4181f6c8e367c6dae7d289dd52294538d",
         "av_labels": [ ["Avast", None],
                        ["Avira", None],
                           ............
                        ["Eset", "Trojan/Win32.Tepfer"]
                      ]
        }

我认为实际上应该将 "av_labels" 键的值从 dict-of_dict 转换为 list-of-lists 并删除 "result" 键。

我看到了一些将 dict 转换为 list 的技术,但我没有得到预期的结果。我使用python 3。

【问题讨论】:

    标签: python list dictionary type-conversion


    【解决方案1】:

    您可以通过使用列表解析重新分配“av_labels”键来做到这一点。我已将您的变量名称更改为 a,因为输入是 python 的 built-in function

    a['av_labels'] = [[k, v['result']] for k, v in a['av_labels'].items()]
    
    
    {'av_labels': [['Avast', None],
                   ['Avira', None],
                   ['Eset', 'Trojan/Win32.Tepfer']],
     'md5': '36a4d23084085455409e4fc2c8655e47',
     'sha1': '13f24657a8823b5e076b841ab5dfa1db5aa3825d',
     'sha256': 'fffaeb0de998f17d1e58bd1329241dc4181f6c8e367c6dae7d289dd52294538d'}
    

    【讨论】:

    • 是的,我忘了。例如,我只是命名它,这是我的错误。感谢您的回答。这就是我所期望的。
    【解决方案2】:

    这是您可以将其转换为元组的方法。元组基本上是一个不可变的列表。

    d["av_labels"] = list(zip(d["av_labels"].keys(),map(lambda x: list(x.values())[0],d["av_labels"].values())))
    

    【讨论】:

    • Ty 但它引发 AttributeError... 它说列表没有属性键。
    猜你喜欢
    • 1970-01-01
    • 2014-09-23
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2018-12-06
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多