python: понимание списка над списком словарей списка словарных элементов - PullRequest
0 голосов
/ 12 июля 2020

Я знаю, что это худшее название, но позвольте мне объяснить вопрос по образцу. Мои данные:

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" в "subdata", т.е.

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

Я знаю for-l oop подходит для этой цели, но вам интересно, возможно ли понимание списка? Я пробовал это: goal = [x["ext_id"] for y in data for x in y["subdata"]] и получил сплющенную версию цели ["12345", "54321", ...], а не двухмерный список.

Любые советы приветствуются.

Ответы [ 2 ]

3 голосов
/ 12 июля 2020

Если у вас есть такая структура данных:

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')]
0 голосов
/ 13 июля 2020

Да, вы можете использовать здесь понимание списка. Следующий код даст вам желаемый результат

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