Python collections.OrderedDict解决dict元素顺序问题

简介: 编程中遇到个问题,python json.loads时元素顺序可能会发生变化。这个对于一些需要使用元素顺序来做一些策略的代码来说是致命的。在网上查了查,结合自己的知识总结一下。使用dict时,Key是无序的。

编程中遇到个问题,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")
19 
20 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

相关文章
|
30天前
|
程序员 Python
Python 将元素添加到列表
【8月更文挑战第21天】
36 3
|
29天前
|
测试技术 Python 容器
Python接口自动化测试框架(基础篇)-- 常用数据类型dict
这篇文章详细介绍了Python中字典(dict)数据类型的使用,包括字典的创建、取值、增删改操作以及内置函数的应用,并探讨了字典的扩展特性,如键的唯一性和不可变性。
12 0
Python接口自动化测试框架(基础篇)-- 常用数据类型dict
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer II 082. 含有重复元素集合的组合
解决LeetCode平台《剑指 Offer II 082. 含有重复元素集合的组合》题目的Python代码实现,通过深度优先搜索算法找出所有和为特定目标值的数字组合,并在搜索过程中通过排序和跳过重复元素来避免解集中出现重复组合。
30 2
|
22天前
|
存储 Python 容器
python内置collections模块的使用
python内置collections模块的使用
9 0
|
22天前
|
Python
python在列表、元素、字典、集合和numpy的数组前加上星号 * 是什么含义,以及*args和**kwargs的使用
python在列表、元素、字典、集合和numpy的数组前加上星号 * 是什么含义,以及*args和**kwargs的使用
24 0
|
1月前
|
JSON 算法 算法框架/工具
【python】python指南(十二):Json与dict、list互相转换
【python】python指南(十二):Json与dict、list互相转换
13 0
|
1月前
|
SQL 机器学习/深度学习 算法
【python】python指南(六):静态类型注解之Dict
【python】python指南(六):静态类型注解之Dict
24 0
|
2月前
|
索引 Python
Python中,元素
【7月更文挑战第13天】Python中,元素
19 5
|
1月前
|
算法 索引 Python
【Leetcode刷题Python】34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
解决LeetCode "在排序数组中查找元素的第一个和最后一个位置" 问题的方法。第一种方法是使用两次二分查找,首先找到目标值的最左边界,然后找到最右边界。第二种方法是利用Python的list.index()方法,先正序找到起始位置,再逆序找到结束位置,并给出了两种方法的Python实现代码。
43 0
|
1月前
|
Python
【Leetcode刷题Python】203.移除链表元素
文章提供了三种删除链表中特定值节点的方法:迭代法、虚拟节点迭代删除法和递归法,并给出了相应的Python实现代码。
13 0