Python collections.OrderedDict解決dict元素順序問題
阿新 • • 發佈:2017-08-17
字符 叠代 div 元素 www. 插入 問題 span 字符串
編程中遇到個問題,python json.loads時元素順序可能會發生變化。
這個對於一些需要使用元素順序來做一些策略的代碼來說是致命的。
在網上查了查,結合自己的知識總結一下。
使用dict
時,Key是無序的。在對dict
做叠代時,我們無法確定Key的順序。
如果要保持Key的順序,可以用OrderedDict。
OrderedDict
的Key會按照插入的順序排列,不是Key本身排序。
1 #coding=utf-8 2 3 import json 4 import collections 5 6 my_dict = {} 7 my_list = ["測試", "1324", "r4ge5"] 8 9 for i in my_list: 10 my_dict[i] = my_list[my_list.index(i)] 11 12 print "str1原串:" 13 str1 = json.dumps(my_dict, ensure_ascii=False) 14 print str1 15 16 print "對str1字符串進行loads後的結果:" 17 data_js = json.loads(str1) 18 print json.dumps(data_js, ensure_ascii=False).encode("utf8") 1920 print "對str1字符串進行loads後的結果(使用OrderedDict):" 21 data_js = json.loads(str1, object_pairs_hook=collections.OrderedDict) 22 print json.dumps(data_js, ensure_ascii=False).encode("utf8")
執行結果:
str1原串: {"測試": "測試", "r4ge5": "r4ge5", "1324": "1324"} 對str1字符串進行loads後的結果: {"r4ge5": "r4ge5", "1324": "1324", "測試": "測試"} 對str1字符串進行loads後的結果(使用OrderedDict): {"測試": "測試", "r4ge5": "r4ge5", "1324": "1324"}
更多可以參考:
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001411031239400f7181f65f33a4623bc42276a605debf6000
Python collections.OrderedDict解決dict元素順序問題