python2.7_實現dictionary按照輸入順序輸出


背景:

需要讀取一個csv文件,並將其數據保存在dictionary中,並按照讀文件的順序輸出,且不能引用第三方包,只能使用python自帶模塊。輸出格式如下:

在使用python的dictionary結構時,發現輸出順序跟輸入順序不一樣,而場景需要的是輸出順序跟輸入順序一致。

分析:

從python2.7官方文檔得知,dictionary是無序存儲的,所以並不能保證輸出順序跟輸入順序完全一樣。

但是python2.7同時也提供了另一種擴展的存儲對象collection.OrderedDict(),可以記錄dict的添加順序,並按照添加順序輸出。

另外,我們也可以在把數據添加到字典時用list來保存添加的key值,然后輸出時按照list的key值順序輸出。

下面,就是這兩種方式的實現步驟。

實現:

 1)通過引用python自帶的collection模塊,聲明collection.OrderedDict()對象,將csv文件每行的第一個字段作為key,其他字段作為value(list格式),順序添加至字典對象dcitT中,之后按照格式輸出。

 1 import collections
 2
 3 def main():
 4     f = open('Emissions.csv')
 5     line = f.readlines()
 6     #聲明對象
 7     dictT = collections.OrderedDict()
 8     for tmp in line:
 9         tmp = tmp.rstrip("\n")
10         dictT[tmp.split(",")[0]] = tmp.split(",")[1:]
11     f.close()
12     keys = dictT.keys()
13     for key in keys:
14         value = dictT[key]
15         print key, '-', value

 

2)仍然聲明為無序存儲的dict()對象,在添加數據至字典對象dictT中時,並將key值添加至list對象listT,之后輸出時去listT的值輸出對象的字典value。

 1 def main():
 2     f = open('Emissions.csv')
 3     line = f.readlines()
 4     dictT = dict()
 5     listT = []
 6     for tmp in line:
 7         tmp = tmp.rstrip("\n").split(",")
 8         dictT[tmp[0]] = tmp[1:]
 9         list.append(listT,tmp[0])
10     f.close()
11     for key in listT:
12         value = dictT[key]
13         print key, '-', value

結果:

注:python3.6以上版本已支持字典有序輸出。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM