首页 > 解决方案 > python:对字典项目列表的字典列表的列表理解

问题描述

我知道这是一个最糟糕的标题,但让我通过示例来解释这个问题。我的数据是:

data = [
  {
    "subdata": [ # subdata various number of dictionaries of same keys, including "ext_id", ...
      {
        "ext_id": "12345",   # ... but of different values
        ...
      },
      {
        "ext_id": "54321",
        ...
      }
    ],
    ...
  },
  ... # and many other dictionary items with "subdata", which in turn contains 
      # a list of dictionaries containing "ext_id" and corresponding values
]

我的目标是列出“子数据”中的一对“ext_id”,即

goal = [
  ("12345", "54321"),
  (...)
]

我知道这个目标可以使用 for 循环,但想知道列表推导是否可行?我试过这个: goal = [x["ext_id"] for y in data for x in y["subdata"]] 得到一个扁平版本的目标["12345", "54321", ...]而不是二维列表。

任何建议表示赞赏。

标签: pythonlist-comprehension

解决方案


如果你有这样的数据结构:

data = [
  {
    "subdata": [
      {
        "ext_id": "12345",
      },
      {
        "ext_id": "54321",
      }
    ],
  },
  {
    "subdata": [
      {
        "ext_id": "98765",
      },
      {
        "ext_id": "56789",
      }
    ],
  }
]

然后要获得您想要的输出,您可以使用列表推导(以及生成器推导),如下所示:

goal = [tuple(dict_['ext_id'] for dict_ in subdata['subdata']) for subdata in data ]

goal将包含:

[('12345', '54321'), ('98765', '56789')]

推荐阅读