zoukankan      html  css  js  c++  java
  • Python collections.OrderedDict解决dict元素顺序问题

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

  • 相关阅读:
    [ARC101C] Ribbons on Tree
    NOIP2020 模拟赛 B 组 Day6
    #10471. 「2020-10-02 提高模拟赛」灌溉 (water)
    #10470. 「2020-10-02 提高模拟赛」流水线 (line)
    一类巧妙利用利用失配树的序列DP
    学军中学csp-noip2020模拟5
    信号与槽-高级应用
    PyQt5中的布局管理-QSplitter
    PyQt5中的布局管理-嵌套布局
    信号与槽-入门应用
  • 原文地址:https://www.cnblogs.com/xudong-bupt/p/7379661.html
Copyright © 2011-2022 走看看