繁体   English   中英

python:对字典项目列表的字典列表的列表理解

[英]python: a list comprehension over a list of dictionaries of list of dictionary items

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

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", ...]而不是二维列表。

任何建议表示赞赏。

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

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

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

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

goal将包含:

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

是的,您可以在此处使用列表理解。 以下代码将为您提供所需的结果

[tuple(sub_dict.get('ext_id') for sub_dict in dictionary.get('subdata')) for dictionary in data]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM