Если все диктовки имеют одинаковые ключи, то вы можете просто использовать клавиши первого диктанта:
result = {k:[d[k] for d in dictionary_list] for k in dictionary_list[0].keys()}
Если у диктов может быть разный набор ключей, но вы в порядке со спискамиразной длины, я бы использовал defaultdict
для упрощения:
from collections import defaultdict
result = defaultdict(list)
for d in dictionary_list:
for k, v in d.items():
result[k].append(v)
Если у dicts могут быть разные наборы ключей, и вы хотите, чтобы все списки были одинаковой длины, тогда вам понадобитсяповторить дважды.Вам также понадобится какое-то значение заполнителя для использования, когда ключ отсутствует.Если мы хотим использовать None
для этого, мы можем сделать:
placeholder = None
keys = set()
for d in dictionary_list:
keys += set(d.keys())
result = {k:[] for k in keys}
for d in dictionary_list:
for k in keys:
result[k].append(d.get(k, placeholder))
В каждом случае result
является списком списков.Если вам нужен список списков, то на самом деле он еще проще:
result = [[d[k] for d in dictionary_list] for k in dictionary_list[0].keys()]
Если вы хотите, чтобы все списки были одинаковой длины и содержали заполнители, вам все равно придется использовать в качестве промежуточного элемента списки списков.шаг.Но это легко преобразовать из списка списков в список списков значений:
list_of_lists_of_values = list(dict_of_lists_of_values.values())
Тем не менее, до Python 3.7 словари не имели четко определенного порядка итераций, поэтому вы 'Возможно, в любом случае лучше использовать словарь, потому что в противном случае трудно быть уверенным, что вы получаете правильные значения (например, «Общая численность населения» не обязательно будет первой серией значений).