最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python編程對(duì)列表中字典元素進(jìn)行排序的方法詳解

 更新時(shí)間:2017年05月26日 11:21:17   作者:jihite  
這篇文章主要介紹了Python編程對(duì)列表中字典元素進(jìn)行排序的方法,涉及Python針對(duì)列表及字典元素的遍歷、讀取、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Python編程對(duì)列表中字典元素進(jìn)行排序的方法。分享給大家供大家參考,具體如下:

內(nèi)容目錄:

1. 問題起源
2. 對(duì)列表中的字典元素排序
3. 對(duì)json進(jìn)行比較(忽略列表中字典的順序)

一、問題起源

json對(duì)象a,b

a = '{"ROAD": [{"id": 123}, {"name": "no1"}]}'
b = '{"ROAD": [{"name": "no1"}, {"id": 123}]}'

特點(diǎn):a,b對(duì)應(yīng)的Python的對(duì)象中鍵對(duì)應(yīng)的鍵值——列表中包含著相同的字典元素,但是唯一不同的是順序不同。如果忽略順序,如何判斷兩個(gè)json是否相等。因?yàn)樽值浔旧硎亲约喊存I排序的,列表是按加入的順序排序的,如果對(duì)列表中的字典元素進(jìn)行排序就可以輕松地排序了。如果列表中是普通的元素(不是字典),通過list(set())組合可以讀列表進(jìn)行排序,而列表中如果是字典元素不能使用list(set())組合,看提示:

>>> a = [{'a':1, 'b':2}, {'c':3}]
>>> a
[{'a': 1, 'b': 2}, {'c': 3}]
>>> b = set(a)
Traceback (most recent call last):
 File "<pyshell#2>", line 1, in <module>
  b = set(a)
TypeError: unhashable type: 'dict'

提示為字典是不可進(jìn)行哈希操作的類型(普通非字典的元素進(jìn)行哈希操作即可輕松排好序)。

那么問題的本質(zhì)即:如何對(duì)列表中的字典元素排序。

二、對(duì)列表中的字典元素排序

還好,列表有sorted函數(shù),試一下

>>> p = [{'b': 2}, {'a': 1, 'c': 3}]
>>> q = [{'a': 1, 'c': 3}, {'b': 2}]
>>> p
[{'b': 2}, {'a': 1, 'c': 3}]
>>> q
[{'a': 1, 'c': 3}, {'b': 2}]
>>> pp = sorted(p)
>>> qq = sorted(q)
>>> pp
[{'b': 2}, {'a': 1, 'c': 3}]
>>> qq
[{'b': 2}, {'a': 1, 'c': 3}]
>>> pp == qq
True
>>> p == q
False

可以看出,ok的,并且可以看出排序的原則是元素個(gè)數(shù)。

三、對(duì)json進(jìn)行比較(忽略列表中字典的順序)

import json
def compare_json(a, b):
  aa = json.loads(a)
  bb = json.loads(b)
  len_a = len(aa)
  len_b = len(bb)
  if len_a != len_b:
    return False
  else:
    for key in aa:
      if not bb.has_key(key):
        return False
      else:
        if sorted(aa[key]) != sorted(bb[key]):
          return False
  return True
if __name__ == "__main__":
  a = '{"ROAD": [{"id": 123}, {"name": "no1"}]}'
  b = '{"ROAD": [{"name": "no1"}, {"id": 123}]}'
  print compare_json(a, b)

細(xì)節(jié):自己寫json格式時(shí),a = "{'road':1}"  json.loads(a) 錯(cuò)誤,得寫成a = '{"road:1}'  【單引號(hào)在外】

PS:關(guān)于json操作,這里再為大家推薦幾款比較實(shí)用的json在線工具供大家參考使用:

在線JSON代碼檢驗(yàn)、檢驗(yàn)、美化、格式化工具:
http://tools.jb51.net/code/json

JSON在線格式化工具:
http://tools.jb51.net/code/jsonformat

在線XML/JSON互相轉(zhuǎn)換工具:
http://tools.jb51.net/code/xmljson

json代碼在線格式化/美化/壓縮/編輯/轉(zhuǎn)換工具:
http://tools.jb51.net/code/jsoncodeformat

在線json壓縮/轉(zhuǎn)義工具:
http://tools.jb51.net/code/json_yasuo_trans

更多Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python操作json技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論

什邡市| 湘阴县| 南投市| 武冈市| 昔阳县| 丘北县| 金堂县| 蓝山县| 禹城市| 千阳县| 无锡市| 华池县| 邯郸县| 济宁市| 含山县| 贵定县| 赣榆县| 岐山县| 库车县| 长子县| 舟山市| 丰都县| 炉霍县| 图木舒克市| 客服| 宜都市| 会理县| 大化| 屯留县| 白山市| 香港 | 来宾市| 石家庄市| 木兰县| 灌阳县| 重庆市| 威海市| 舒城县| 延安市| 庄河市| 监利县|