如何将嵌套的dict转换为dictoflist?

2024-10-01 02:27:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由多个嵌套dict组成的输入文件,如下所示:

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转换为列表列表,并删除"result"

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


Tags: nonelabelsresultsha1md5dictwin32sha256
2条回答

您可以通过使用列表理解重新指定“av_标签”键来完成此操作。我已经将变量名更改为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'}

这就是如何将其转换为元组。元组基本上是一个不可变的列表

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

相关问题 更多 >