Кто-нибудь знает, где есть рецепт для сериализации данных и сохранения их порядка в выводе? - PullRequest
1 голос
/ 25 ноября 2008

Я работаю с набором данных, которые я преобразовал в список словарей

Например, один элемент в моем списке

{'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'}

Причина, по которой мне нужно это выбрать, заключается в том, что мне нужно выяснить все способы, которыми были помечены столбцы, прежде чем объединять результаты и помещать их в базу данных. Первый и второй элементы будут одной строкой в ​​результатах, третий и четвертый будут следующей строкой в ​​результатах (после того, как кто-то решит, какой должна быть метка заголовка единого столбца)

Я протестировал рассол и смог сохранить и восстановить мои данные. Тем не менее, я должен быть в состоянии сохранить порядок в выводе. У меня есть идея добавить еще один ключ, который будет счетчиком, чтобы я мог получить свои данные и затем отсортировать по счетчику. Есть ли лучший способ?

Я не хочу помещать это в базу данных, потому что она не постоянна.

Я отметил ответ внизу. Это не то, что я получаю, поэтому мне нужно выяснить, есть ли проблема где-то еще в моем коде.

Ответы [ 3 ]

5 голосов
/ 26 ноября 2008

Так что не так с рассолом? Если вы структурируете свои данные как список диктовок, то все должно работать так, как вы хотите (если я понимаю вашу проблему).

>>> 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
1 голос
/ 25 ноября 2008

Python dict является неупорядоченным контейнером. Если вам нужно сохранить порядок записей, вам следует рассмотреть возможность использования списка из двух кортежей.

Другой вариант - сохранить дополнительный упорядоченный список ключей. Таким образом, вы можете воспользоваться быстрым доступом по ключу, предлагаемым словарем, при этом все еще имея возможность перебирать его значения упорядоченным образом:

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]
1 голос
/ 25 ноября 2008

Python не сохраняет порядок в словарях.
Однако класс OrderedDict присутствует в модуле collection .

Другой вариант - использовать список кортежей:

[('reportDate', u'R20080501'), ('idnum', u'1078099'), ...etc]

Вы можете использовать встроенный dict(), если позже вам потребуется преобразовать его в словарь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...