首先說明一點:python的dict這個東西是沒辦法按照指定順序的key存的
一、按key排序:
1,直接從dict輸出,只要保證輸出結果的順序是按key排序就可以了
2,按key儲存為其他一種資料格式(比如list, 或者 collections.ordereddict)之後,進行輸出。這樣輸出的結果的順序也可以被固定,比如固定為按key排序
# 方法2:轉成list
>>> c =
# 方法1:
>>> keys = c.keys()
>>> keys.sort() # 這是一種排序。相當於設定乙個固定的列表來儲存key的順序
>>> output_list = [(key, c[key]) for key in keys]
# 輸出的結果是按照特定排序的
>>> output_list
[('a', 2), ('b', 1)]
# 方法3:使用sorted函式。沒有嘗試過。參考:
# 類似於按手動設定的權重輸出(手動設定順序)?
dic = # 想要按照這裡的姓名順序輸出
in [172]: dic
out[172]:
in [173]: def mycmp(x,y):
.....: d =
.....: x = d[x]
.....: y = d[y]
.....: if x > y:
.....: return 1
.....: elif x == y:
.....: return 0
.....: else:
.....: return -1
.....:
in [174]: dic.items()
out[174]: [('jessica', 80), ('mary', 70), ('lee', 100), ('tom', 90)]
in [175]: sorted(dic.items(),cmp=mycmp,key=lambda x:x[0])
out[175]: [('lee', 100), ('tom', 90), ('jessica', 80), ('mary', 70)]
in [176]: for item in sorted(dic.items(),cmp=mycmp,key=lambda x:x[0]):
.....: print item[0],item[1]
ps:
# dict組成的字串,按照字串中dict中key的順序輸出或者儲存。使用collections.ordereddict
參考:
>>> c =
# 正常情況,只要輸出c,肯定都是 , 怎麼輸出都是這樣。無法按照原樣輸出。
>>> c
# 只有輸入是dict組成的字串時,ordereddict方法才起作用
>>> c = ''
# 使用json和ordereddict
>>> import json
>>> from collections import ordereddict
>>> c = json.loads(c, object_pairs_hook=ordereddict)
>>> for key in c:
... print(key, c[key])
...('b', 1)
('a', 2)
# c = json.dumps(c) # 可以把乙個字典格式轉換為字串格式,和str(c)略有差別,如下:
>>> c =
>>> str(c)
"">>> c =
>>> json.dumps(c)
''# json.dumps:作用是將字典轉換為字串。json.loads: 作用是將字串轉換為json(dict)。
已經被字典排序坑很久了:
二、按value排序
>>> a =
>>> sorted(a.items(), key=lambda item:item[1])
[(2, 23), (3, 44), (1, 1112)]
lambda表示式語法:冒號左邊是輸入引數,右邊是運算的表示式。即輸入是dict的item,輸出是value,然後將value作為key給sorted函式進行排序。
----------------------因為python中dict無法保證一定按照特定順序的key進行儲存,以下方法不穩定,不要使用!!!--------------------
方法1:用python自帶的sorted
# 正向排序
>>> dict1 =
>>>
# 輸出:
# 反向排序
>>>
# 輸出:
為什麼反向輸出不是正好相反的順序呢??
參考:
Python3基礎5 字典dict
字典 dict 符號 大括號 花括號 無序 1 可以存在空字典a 2 字典裡面資料儲存的方式 key value 3 字典裡面value可以包含任何型別的資料 4 字典裡面的元素 根據逗號來進行分隔 5 字典裡面的key必須是唯一的 a 字典取值 字典 key print a t age 20刪除 ...
python3字典排序
說實話,對字典進行排序,這個說法本身就有問題,實際上,你無法對操縱字典說,字典,在你的底層實現裡,你就得按照我指定的順序來排列,如果這樣的話,字典就喪失了它的速度優勢,它也不是乙個字典了.好了,廢話不多說,我這裡稍微記錄一下我的做法吧.python2裡面原來是有dict.iteritems這樣乙個函...
python3字典遍歷 python3字典遍歷
python版本 python3.7 info infog.get name 得到字典info中name的值 info.keys 得到字典info中所有的鍵,結果是乙個物件 dict keys name age 需要注意在python2中該操作得到的是乙個列表 遍歷key for temp in i...