python字典中根据值的大小,按顺序排列键有什么方法?

Python039

python字典中根据值的大小,按顺序排列键有什么方法?,第1张

s = {"a":"bb","b":"cc","c":"aa"}

def fun(s):

d = sorted(s.iteritems(),key=lambda t:t[1],reverse=False)

return d

d = fun(s)

print d

iteritems()得到的[(键,值)]的列表,通过sorted方法,指定排序的键值key是原来字典中的value属性,其中用到了匿名函数lambda,参数为t列表,返回第二个元素t[1],也就是每个键值对中的value, 从小到大排序时reverse=False,从大到小排序是True!

Python [1]  (英国发音:/ˈpaɪθən/美国发音:/ˈpaɪθɑːn/),是一种面向对象的解释型计算机程序设计语言,由荷兰人GuidovanRossum于1989年发明,第一个公开发行版发行于1991年。

Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU GeneralPublicLicense)协议。Python语法简洁清晰,特色之一是强制用空白符(whitespace)作为语句缩进。

Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面)

然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。

你是希望按照输入顺序输出还是按照key或者value的排序输出呢?

如果按照输入顺序输可以这样(方法一):

# 通过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

如果按照输入顺序输出还可以这样(方法二):

import collections      

d=collections.OrderedDict()  

d['a']='A'  

d['b']='B'  

d['c']='C'  

for k,v in d.items():  

    print k,v 

# --  OUTPUT --

#a A  

#b B  

#c C

如果按照key排序输出要这样:

x = {1:2, 3:4, 4:3, 2:1, 0:0}  

#升序

sorted_x = sorted(x.iteritems(), key=lambda x : x[0])  

print sorted_x  

# --  OUTPUT --

#[(0, 0), (1, 2), (2, 1), (3, 4), (4, 3)]  

#降序

sorted_x = sorted(x.iteritems(), key=lambda x : x[0], reverse=True)  

print sorted_x  

# --  OUTPUT --

#[(4, 3), (3, 4), (2, 1), (1, 2), (0, 0)]

如果按照value排序输出要这样:

x = {1:2, 3:4, 4:3, 2:1, 0:0}  

#升序

sorted_x = sorted(x.iteritems(), key=lambda x : x[1])  

print sorted_x  

# --  OUTPUT --

#[(0, 0), (2, 1), (1, 2), (4, 3), (3, 4)]  

#降序

sorted_x = sorted(x.iteritems(), key=lambda x : x[1], reverse=True)  

print sorted_x  

# --  OUTPUT --

#[(3, 4), (4, 3), (1, 2), (2, 1), (0, 0)]

默认情况下Python的字典输出顺序是按照键的创建顺序。

字典的无序是指,不能人为重新排序。

比如说你按键值1,2,3,4的顺序创建的字典,只能由解析器按创建顺序,还是1,2,3,4的输出。

你无法控制它按照4,3,2,1的顺序输出,你也无法做到1,3,2,4的顺序。

而且这个输出顺序是也不是能真正按照创建顺序可以控的。

这里面有两个影响因素:

(1)键值的哈希碰撞,hash(key1) == hash(key2)时,向字典里连续添加的这个两个键的顺序是不可以控制的,也是无法做到连续的,后来的键会按算法调整到其它位置。

(2)字典空间扩容,当键的数量超过字典默认开的空间时,字典会做空间扩容,扩容后的键顺和创建顺序就会发生变化,不受人为控制。