【问题标题】:Python - how to get all the values of nested dictionaries as a single List[dict]?Python - 如何将嵌套字典的所有值作为单个 List[dict] 获取?
【发布时间】:2020-11-23 02:35:54
【问题描述】:

我正在尝试解析此列表以获取单个 List[dict],其中包含包含所有指标类型数据的字典。

metrics_info = [
    {
        "metric_type1": [
            {
                "name": "m10",
                "score": "11"
            },
            {
                "name": "m20",
                "score": "790"
            }
        ]},
    {
        "metric_type2": [
            {
                "name": "m30",
                "score": "245"

            }
        ]}
]

现在我创建了一个方法,允许获取特定指标类型的字典列表:

def parse_metrics(metrics_info: List[dict], metric_type: str) -> List[dict]:
    for item in metrics_info:
        if metric_type in item:
            return item[metric_type]

如何获取包含所有指标类型的内部字典的 List[dict]?

结果应该是这样的:

[
            {
                "name": "m10",
                "score": "11"
            },
            {
                "name": "m20",
                "score": "790"
            },
            {
                "name": "m30",
                "score": "245"
            }
]

【问题讨论】:

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


    【解决方案1】:

    可能有一种更好的方法,但他应该做的工作:

    meterics_info = [ ... ]
    all_values = []
    for d in metrics_info:
        all_values.extend(d.values())
    

    【讨论】:

      【解决方案2】:

      所以我对蒙库特的回答做了一个小的修改。他们的返回列表列表。看起来您正在寻找一个扁平列表。我有两种方法,一种使用 for 循环,另一种使用 python 中的函数方法。

      all_values= [item for _list in map(lambda _dict: list(_dict.values())[0], metrics_info) for item in _list]
      

      all_values = []
      for _dict in metrics_info:
          for value in list(_dict.values()):
              all_values.extend(value)
      

      两者都会产生您正在寻找的相同结果。一个扁平化的列表。

      【讨论】:

        【解决方案3】:

        通过列表理解的另一种方式:

        b=[]
        [b.append(y) for i in metrics_info  for x,y in i.items()]
        print(b)
        

        【讨论】:

          猜你喜欢
          • 2014-07-21
          • 1970-01-01
          • 1970-01-01
          • 2012-05-21
          • 1970-01-01
          • 2019-07-01
          • 1970-01-01
          • 2021-05-10
          • 2020-07-22
          相关资源
          最近更新 更多