Я работаю с набором данных, которые я преобразовал в список словарей
Например, один элемент в моем списке
{'reportDate': u'R20070501', 'idnum': u'1078099', 'columnLabel': u'2005',
'actionDate': u'C20070627', 'data': u'76,000', 'rowLabel': u'Sales of Bananas'}
За запрос
Второй элемент в моем списке может быть:
{'reportDate': u'R20070501', 'idnum': u'1078099', 'columnLabel': u'2006',
'actionDate': u'C20070627', 'data': u'86,000', 'rowLabel': u'Sales of Bananas'}
Третий элемент может быть:
{'reportDate': u'R20070501', 'idnum': u'1078100', 'columnLabel': u'Full Year 2005',
'actionDate': u'C20070627', 'data': u'116,000', 'rowLabel': u'Sales of Cherries'}
Четвертый элемент может быть:
{'reportDate': u'R20070501', 'idnum': u'1078100', 'columnLabel': u'Full Year 2006',
'actionDate': u'C20070627', 'data': u'76,000', 'rowLabel': u'Sales of Sales of Cherries'}
Причина, по которой мне нужно рассортировать это, - это то, что мне нужно выяснить все способы помечать столбцы, прежде чем консолидировать результаты и поместить их в базу данных. Первый и второй элементы будут одной строкой в результатах, третий и четвертый будут следующей строкой в результатах (после того, как кто-то решит, что должна быть одинаковая метка заголовка столбца)
Я тестировал рассол и смог сохранить и получить мои данные. Однако мне нужно сохранить порядок в выходе. Одна из моих идей - добавить еще один ключ, который будет счетчиком, чтобы я мог получить мои данные, а затем сортировать по счетчику. Есть ли лучший способ?
Я не хочу помещать это в базу данных, потому что он не является постоянным.
Я отметил ответ ниже. Это не то, что я получаю, поэтому мне нужно выяснить, есть ли проблема в другом месте моего кода.
Так что же с рассолом? Если вы структурируете свои данные в виде списка dicts, тогда все должно работать так, как вы хотите (если я понимаю вашу проблему).
>>> import pickle
>>> d1 = {1:'one', 2:'two', 3:'three'}
>>> d2 = {1:'eleven', 2:'twelve', 3:'thirteen'}
>>> d3 = {1:'twenty-one', 2:'twenty-two', 3:'twenty-three'}
>>> data = [d1, d2, d3]
>>> out = open('data.pickle', 'wb')
>>> pickle.dump(data, out)
>>> out.close()
>>> input = open('data.pickle')
>>> data2 = pickle.load(input)
>>> data == data2
True
Python не сохраняет порядок в словарях.
Однако в модуле коллекций есть класс OrderedDict.
Другой вариант - использовать список кортежей:
[('reportDate', u'R20080501'), ('idnum', u'1078099'), ...etc]
Вы можете использовать встроенный dict()
, если вам нужно позже его преобразовать в словарь.
Python dict - неупорядоченный контейнер. Если вам нужно сохранить порядок записей, вам следует использовать список из 2-х кортежей.
Другой вариант - сохранить дополнительный, упорядоченный список ключей. Таким образом, вы можете воспользоваться быстрым доступным ключом, доступным для словаря, но все же иметь возможность выполнять итерацию его значений упорядоченным образом:
data = {'reportDate': u'R20070501', 'idnum': u'1078099',
'columnLabel': u'2005', 'actionDate': u'C20070627',
'data': u'76,000', 'rowLabel': u'Sales of Bananas'}
dataOrder = ['reportDate', 'idnum', 'columnLabel',
'actionDate', 'data', 'rowLabel']
for key in dataOrder:
print key, data[key]