Python字典排序的簡單實現

2021-06-20 10:35:11 字數 1510 閱讀 4221

需要解決的問題:

將一段如下引數按照key=value公升序排列,最終輸出的需要將冒號替代為「=」,各鍵值對之間通過"&"連線。如:abcdef=18600001234&cdefg=001

引數如下:

"abcdef":18600001234,"cdefg":001,"cdefghij":001,"fghijkl":001,"afghijkl":6111057637279851

從上面的資料可以看出,其實就是先轉換成字典,然後再排序一下就ok了。**很簡單如下:

#encoding=utf-8

def sortdict(adict, key):

return "&".join(['='.join(str(x) for x in y) for y in sorted(adict.iteritems(), key=lambda x:x[key])])

if __name__ == "__main__":

adict = raw_input("輸入字串:\n")

key = raw_input("key:0 or value:1\n")

adict = eval("")

if key == '':

key = 0

print sortdict(adict, int(key))

上面**主要涉及到的知識點有:

1.sorted的用法:其中需要注意的是key這個引數的使用。這個可以參照這篇文章,引自打怪的程式猿大神。

最重要的就是這句話:引數key指定的函式返回乙個元組,多條件排序的順序將按照元組的順序。

還有就是sorted返回排序後的資料,但是sort只在原資料上修改,無返回值,需要特別注意。

2.字典的iteritems()方法,這個方法可以返回字典的鍵值對。示例如下:

a = 

for i in a.iteritems():

print i

#輸出結果:

('a', 11)

('c', 33)

('b', 22)

3.eval()將字串直接轉換成乙個python資料型別:字典。這個前面提到過。具體用法(待補充)

4.列表推導:很神奇的乙個東西。個人一點理解:

(1)列表推導是從外到內進行迴圈,如

[[x+1 for x in y] for y in a]

#等價形式

for y in a:

for x in y:

x += 1

(2)使用圓括號的生成的是生成器,生成器的乙個很明顯的優勢是「惰性求值」(忘了是不是這個詞),列表較大的時候效能很好:

>>> a = [[1,2],[3,4],[5,6],[7,8]]

>>> b = ((x+1 for x in y) for y in a)

>>> type(b)

python實現字典排序 python 字典排序

引子 字典,形如 dic 字典中的元素沒有順序,所以dic 0 是有語法錯誤的。並且不可以有重複的鍵值,所以 dic.add c 4後,字典變成 待解決問題 如何根據需要可以根據 鍵 或 鍵值 進行不同順序的排序?函式原型 sorted dic,value,reverse dic為比較函式,valu...

python字典陣列排序實現

python對容器內資料的排序有兩種,一種是容器自己的sort函式,一種是內建的sorted函式。sort函式和sorted函式唯一的不同是,sort是在容器內排序,sorted生成乙個新的排好序的容器 eg陣列排序 l 5,2,3,1,4 sort l.sort sorted sorted ite...

python字典陣列排序實現

python對容器內資料的排序有兩種,一種是容器自己的sort函式,一種是內建的sorted函式。sort函式和sorted函式唯一的不同是,sort是在容器內排序,sorted生成乙個新的排好序的容器 eg陣列排序 l 5,2,3,1,4 sort l.sort sorted sorted ite...