需要解決的問題:
將一段如下引數按照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...