python字典key排序
1. python中如何以dict的key排序輸出
#輸出的順序卻不是我們預想的那樣初始化的順序,查詢相關文獻得知,Python保證遍##歷字典所有元素,但不保證遍歷的順序,假如我們期望按預先的順序進行遍歷的話,#我目前找到一個辦法,就是通過兩個List分別存儲Key和Value,然後通過zip合並為Dic#tionary,再遍歷:
#通過zip方法合並兩個List為Dictionary
#遍歷會按原先的順序
keys=["b","a","c","e","d"]
values=["2","1","3","5","4"]
forkey,valueinzip(keys,values):
print(key,value)
#--OUTPUT--
#b2
#a1
#c3
#e5
#d4
2. Python字典嵌套字典排序,該怎麼處理
感覺這個需求有些許問題,因為通常對比排序的都是同一類型的數據,譬如aaa代表是年齡,bbb代表的是工資,等等... 所以不會拿自己的年齡和工資作一次排序。
# 要做的話,可以手動給它並成一個新列『sort_key』。 obj就是你最外層的a,免得同名混淆
for i in obj:
obj[i]['sort_key'] = obj[i].values()[0]
# 目的是構造出這樣的結構:
# ('c', {'sort_key': 1, 'ccc': 1}), ('d', {'sort_key': 2, 'ddd': 2}), .....)
print(sorted(obj.items(), key = lambda x:x[1]['sort_key']))
3. Python中如何以dict的key排序輸出
#輸出的順序卻不是我們預想的那樣初始化的順序,查詢相關文獻得知,Python保證遍##歷字典所有元素,但不保證遍歷的順序,假如我們期望按預先的順序進行遍歷的話,#我目前找到一個辦法,就是通過兩個List分別存儲Key和Value,然後通過zip合並為Dic#tionary,再遍歷:
# 通過zip方法合並兩個List為Dictionary
# 遍歷會按原先的順序
keys = ["b", "a", "c", "e", "d"]
values = ["2", "1", "3", "5", "4"]
for key,value in zip(keys, values):
print(key,value)
# -- OUTPUT --
# b 2
# a 1
# c 3
# e 5
# d 4
4. python字典如何根據key比較value
1.sorted函數
首先介紹sorted函數,sorted(iterable,key,reverse),sorted一共有iterable,key,reverse這三個參數。
其中iterable表示可以迭代的對象,例如可以是dict.items()、dict.keys()等,key是一個函數,用來選取參與比較的元素,reverse則是用來指定排序是倒序還是順序,reverse=true則是倒序(從大到小),reverse=false則是順序(從小到大),默認是reverse=false。
2.按照key排序
要對字典按照key排序,可以直接調用sorted函數。
my_dict = {'lilee':25, 'age':24, 'phone':12}
sorted(my_dict.keys())
輸出結果為
['age', 'lilee', 'phone']
直接使用sorted(my_dict.keys())就能按key值對字典排序,這里是按照順序對key值進行排序的,如果想按照倒序排序的話,只需要將reverse置為true即可。
sorted(my_dcit.keys(), reverse = true)
3.按照value值排序
共有三種方法可以實現將字典按照value值進行排序
(1)key使用lambda匿名函數取value進行排序
d = {'lilee':25, 'wangyan':21, 'liqun':32, 'age':19}
sorted(d.items(), key=lambda item:item[1])
輸出結果為
[('age',19),('wangyan',21),('lilee',25),('liqun',32)]
如果需要倒序則
sorted(d.items(), key=lambda item:item[1], reverse=True)
得到的結果就會是
[('liqun',32),('lilee',25),('wangyan',21),('age',19)](2)使用operator的itemgetter進行排序
import operator
sorted(d.items(), key=operator.itemgetter(1))
輸出結果為
[('age',19),('wangyan',21),('lilee',25),('liqun',32)]
(3)將key和value分裝成元組,再進行排序
f = zip(d.keys(), d.values())
c = sorted(f)
輸出結果為
[('age',19),('wangyan',21),('lilee',25),('liqun',32)]
4.取出排序的前n個value值和key值
可以按照如下操作:
before = {"key1": 5,"key2": 6,"key3": 4,"key4": 3,
}# 排序after = dict(sorted(before.items(), key=lambda e: e[1]))print(after)
# 取出前幾個, 也可以在sorted返回的list中取前幾個
required_cnt = 2cnt = 0
for key, value in after.items():
cnt += 1if cnt > required_cnt:breakprint("{}:{}".format(key, value))
5. python中字典的使用方法怎麼樣的
字典理解如下
另一個非常有用的 Python 內建數據類型是 字典 (參見 Mapping Types — dict )。字典在某些語言中可能稱為 聯合內存 ( associative memories )或 聯合數組 ( associative arrays )。序列是以連續的整數為索引,與此不同的是,字典以 關鍵字 為索引,關鍵字可以是任意不可變類型,通常用字元串或數值。如果元組中只包含字元串和數字,它可以作為關鍵字,如果它直接或間接的包含了可變對象,就不能當作關鍵字。不能用列表做關鍵字,因為列表可以用索引、切割或者 append() 和 extend() 等方法改變。
理解字典的最佳方式是把它看作無序的鍵: 值對 (key:value 對)集合,鍵必須是互不相同的(在同一個字典之內)。一對大括弧創建一個空的字典: {} 。初始化列表時,在大括弧內放置一組逗號分隔的鍵:值對,這也是字典輸出的方式。
字典的主要操作是依據鍵來存儲和析取值。也可以用 del 來刪除鍵:值對(key:value)。如果你用一個已經存在的關鍵字存儲值,以前為該關鍵字分配的值就會被遺忘。試圖從一個不存在的鍵中取值會導致錯誤。
對一個字典執行 list(d.keys()) 將返回一個字典中所有關鍵字組成的無序列表(如果你想要排序,只需使用 sorted(d.keys()) )。[2] 使用 in 關鍵字(指Python語法)可以檢查字典中是否存在某個關鍵字(指字典)。
6. python 字典排序 字典序排序是什麼意思
字典就是包含key:value對的集合
比如
L = [{"name": "zhangsan", "birth":19920208, "gender":"m"}, {"name": "lisi", "birth":19900609, "gender":"m"}, {"name": "wanghong", "birth":19950907, "gender":"f"}]
對字典排序就是對列表進行排序後列印:
from operator import itemgetter
L = sorted(L,key=itemgetter('birth'),reverse=True)
for i in range(0,len(L)):
... print("Name: {:10} Gender: {:2} Birth: {}".format(L[i]["name"],L[i]["gender"],L[i]["birth"]))
7. python字典是否有序
默認情況下Python的字典輸出順序是按照鍵的創建順序。
字典的無序是指,不能人為重新排序。
比如說你按鍵值1,2,3,4的順序創建的字典,只能由解析器按創建順序,還是1,2,3,4的輸出。
你無法控制它按照4,3,2,1的順序輸出,你也無法做到1,3,2,4的順序。
而且這個輸出順序是也不是能真正按照創建順序可以控的。
這裡面有兩個影響因素:
(1)鍵值的哈希碰撞,hash(key1) == hash(key2)時,向字典里連續添加的這個兩個鍵的順序是不可以控制的,也是無法做到連續的,後來的鍵會按演算法調整到其它位置。
(2)字典空間擴容,當鍵的數量超過字典默認開的空間時,字典會做空間擴容,擴容後的鍵順和創建順序就會發生變化,不受人為控制。
8. 求助:python元組作為字典的key的排序問題
disks_info=[{u'diskname':u'/dev/vda',u'disktype':u'HDD',u'tag':[u'mounted',u'boot'],u'slotnum':None,u'rpm':7200,u'size':50},{u'diskname':u'/dev/vdb',u'disktype':u'HDD',u'tag':[u'osd_data'],u'slotnum':None,u'rpm':7200,u'size':30},{u'diskname':u'/dev/vdc',u'disktype':u'HDD',u'tag':[u'osd_data'],u'slotnum':None,u'rpm':7200,u'size':30},{u'diskname':u'/dev/vdd',u'disktype':u'HDD',u'tag':[u'osd_data'],u'slotnum':None,u'rpm':7200,u'size':30},{u'diskname':u'/dev/vde',u'disktype':u'HDD',u'tag':[u'osd_data'],u'slotnum':None,u'rpm':7200,u'size':30},{u'diskname':u'/dev/vdf',u'disktype':u'HDD',u'tag':[u'osd_data'],u'slotnum':None,u'rpm':7200,u'size':30}]
disks_info_sorted=sorted(disks_info,key=lambdax:x[u'size'],reverse=True)
print(disks_info_sorted)
9. python字典中根據值的大小,按順序排列鍵有什麼方法
s={"a":"bb","b":"cc","c":"aa"}
deffun(s):
d=sorted(s.iteritems(),key=lambdat:t[1],reverse=False)
returnd
d=fun(s)
printd
iteritems() 得到的[(鍵,值)]的列表, 通過sorted方法,指定排序的鍵值key是原來字典中的value屬性,其中用到了匿名函數lambda, 參數為t列表,返回第二個元素t[1],也就是每個鍵值對中的value, 從小到大排序時 reverse=False,從大到小排序是True!
10. python 列表嵌套字典再嵌套字典怎麼排序
sorted(my_list,key=lambda x:x['location']['left'])