dict
dict 由键值对填充构成,所以排序自然的分为两种情形。
dict_sample = dict()
dict_sample['mother'] = '40'
dict_sample['father'] = '42'
dict_sample['son'] = '5'
按key排序
第一种方法:把键值对都取出,然后排序。
def sort_dict_keys1(a_dict):
a_items = a_dict.items()
a_items.sort()
return [(key,value) for (key, value) in a_items]
dict_sample_a = sort_dict_keys1(dict_sample)
print dict_sample_a
运行结果: [(‘father’, ‘42’), (‘mother’, ‘40’), (‘son’, ‘5’)]
我认为这说明python对键值对形式 默认排序按照了前面的字段。
第二种方法:把key取出,然后对key排序。
def sort_dict_values2(b_dict):
b_keys = b_dict.keys()
b_keys.sort()
return [b_dict[key] for key in b_keys]
dict_sample_b = sort_dict_values2(dict_sample)
print dict_sample_b
运行结果:[‘42’, ‘40’, ‘5’]
这种方法还可以变形一下最后取到value的方法,注意最后一行。
def sort_dict_keys3(c_dict):
c_keys = c_dict.keys()
c_keys.sort()
return map(c_dict.get, c_keys)
dict_sample_c = sort_dict_keys3(dict_sample)
print dict_sample_c
运行结果:[‘42’, ‘40’, ‘5’]
第二种方法还可以进行简化,浓缩为一行
print [(key,dict_sample[key]) for key in sorted(dict_sample.keys())]
运行结果:[(‘father’, ‘42’), (‘mother’, ‘40’), (‘son’, ‘5’)]
按value排序
def sort_dict_values(d_dict):
d_values = d_dict.items()
temp_values=[[int(v[1]),v[0]] for v in d_values]
temp_values.sort()
return [(temp_values[i][1],temp_values[i][0]) for i in range(0,len(temp_values))]
dict_sample_d = sort_dict_values(dict_sample)
print dict_sample_d
注意:由于前面给的年龄是字符串,需要转换为整型值,否则排除的顺序是字符串比较的顺序!
运行结果:[(‘son’, 5), (‘mother’, 40), (‘father’, 42)]
当然如果只需要value的排序,也可以简化一下:
print [ v for v in sorted(dict_sample.values())]
运行结果:[‘40’, ‘42’, ‘5’]
注意这里的顺序既是字符串比较排序的结果,不是整型值。
其他方法
似乎看到网上有用lamda表达式排序,这个以后再单独解决。
list排序
list结构排序有两种方法
sort() 方法原地排序
这是每个Python列表都有的标准方法
data = [6,3,2,1,4,5]
print data
data.sort()
print data
排序结果
[6, 3, 2, 1, 4, 5]
[1, 2, 3, 4, 5, 6]
这说明排序后原来的顺序信息丢失了。
sorted() BIF 返回一个排序好的list
这个方法是Python Build-in Function(BIF)
data = [6,3,2,1,4,5]
print data
data2 = sorted(data)
print data
print data2
排序结果
[6, 3, 2, 1, 4, 5]
[6, 3, 2, 1, 4, 5]
[1, 2, 3, 4, 5, 6]
可以看出sorted()不改变序列本身,而是将排序好的list传出。
参考:
1.http://auzll.iteye.com/blog/847148
2.《Head First Python》