English 中文(简体)
有人知道在哪里有一种序列化数据并保留其输出顺序的配方吗?
原标题:
  • 时间:2008-11-25 20:17:52
  •  标签:

我正在使用转换为字典列表的一组数据进行工作

例如,我列表中的一项是

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

我需要腌制这个的原因是我需要找出在我整合结果并将它们放入数据库之前所有列标签的方式。第一和第二项将是结果中的一行,第三和第四项将是结果中的下一行(在有人决定统一的列标题标签之后)。

我测试了一下pickle,并成功地保存和检索到我的数据。但是,我需要保留输出的顺序。我的一个想法是添加另一个键作为计数器,这样我可以检索我的数据并按计数器排序。但是,是否有更好的方法?

我不想把它放进数据库,因为它不是永久的。

我在下面标记了一个答案。它不是我想要的,所以我需要弄清楚问题是否在我的代码中的其他地方。

最佳回答

那么酸黄瓜有什么问题吗?如果你把你的数据结构化为一个字典列表,那么一切都应该按你想的那样运作(如果我理解你的问题的话)。

>>> 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字典是无序容器。 如果需要保留条目的顺序,应考虑使用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]

Python does not retain order in dictionaries.
However, there is the OrderedDict class in the collections module.

另一种选择是使用元组列表:

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

如果您需要稍后将其转换为字典,则可以使用内置的dict()





相关问题
热门标签