Имейте в виду, что dicts неупорядоченные - поэтому вам необходимо указать порядок ключей, чтобы получить корреляционную порядок значений при отображении к список. Порядок ключей не обязательно будет порядком, в котором они объявлены, порядке они были в последний раз, когда вы смотрели, и т.д.
Так более реалистичный пример данные:
data = {
"items": [
{ "D": "16122 ", "A": 0.00, "B": 33.27, "C": "string" },
{ "B": 5176.66, "A": 0.00, "D": "21216 ", "C": "string" }
]
}
Для отображения неупорядоченных ключей в упорядоченный список, вам нужно выбрать, какой заказ вы будете использовать. Предположу, вы оседать по символьной BETICAL порядка, как и порядок:
ordered_keys=("A", "B", "C", "D")
Затем вы можете преобразовать в вашу структуру с помощью простого цикла:
for k, LoD in data.items(): # consider '.iteritems() on Py 2 and larger dicts...
data[k]=[[di[sk] for sk in ordered_keys] for di in LoD]
>>> data
{'items': [[0.0, 33.27, 'string', '16122 '], [0.0, 5176.66, 'string', '21216 ']]}
Теперь вы должны решить, что делать с ключами, которые могут в списке dicts отсутствует. Если каждый dict имеет точно такие же ключи, вам нужно значение по умолчанию.
Вот так, как вы могли бы сделать это:
data = {
"items": [
{ "D": "16122 ", "A": 0.00, "B": 33.27, "C": "string" },
{ "B": 5176.66, "A": 0.00, "D": "21216 ", "C": "string" },
{ "E": "New Key ", "C": "'A' and 'B' are missing in this dict" }
]
}
for k, LoD in data.items():
keys=sorted({e for sk in LoD for e in sk})
data[k]=[keys]+[[di.get(sk, None) for sk in keys] for di in LoD]
В этом случае все ключи в списке dicts собраны, сортируются, а затем сделал первый элемент в списке списков (так что вы знаю, что есть что и другие ключи от data
могут иметь различный набор ключей).
data = {
"items": [
{ "D": "16122 ", "A": 0.00, "B": 33.27, "C": "string" },
{ "B": 5176.66, "A": 0.00, "D": "21216 ", "C": "string" },
{ "E": "New Key ", "C": "'A' and 'B' are missing in this dict" }
],
"More": [
{ "D": "16122 ", "A": 0.00, "B": 33.27, "C": "string" }
]
}
for k, LoD in data.items():
keys=sorted({e for sk in LoD for e in sk})
data[k]=[keys]+[[di.get(sk, None) for sk in keys] for di in LoD]
Результат:
>>> for k in data:
... print k+':'+'\n\t'+'\n\t'.join(repr(e) for e in data[k])
items:
['A', 'B', 'C', 'D', 'E']
[0.0, 33.27, 'string', '16122 ', None]
[0.0, 5176.66, 'string', '21216 ', None]
[None, None, "'A' and 'B' are missing in this dict", None, 'New Key ']
More:
['A', 'B', 'C', 'D']
[0.0, 33.27, 'string', '16122 ']
Где эти данные в вашем втором примере? В вашем первом примере нет 33.27 или «Deep Creek Restaurant» и т. Д. – BrenBarn
Извините, это была ошибка моего редактирования. Я хотел удалить все конкретные данные. – goopcat
Являются ли ключи в списке dicts ВСЕГДА такими же? Если есть разные ключи, вам нужно иметь соглашение о том, как вы справитесь с этим. – dawg