他想自己在她眼里出现的时候,璀璨如星辰。可即使有那么一天,他披挂着漫天的星辰归来,可是仰望天空的瞳孔已经不在,看星星的女孩已经走了,那璀璨又有什么意思呢?孤单得连星星也想坠落。

    循环遍历字典的时候,遍历对象都是字典的键,做对比的时候对比的也是字典的键,如果想要对比字典的值呢?上一篇文章有说到字典的.items()|.keys()|.values()的使用。此篇记述按照字典的值的大小进行排序。

import sys
import random
reload(sys)
sys.setdefaultencoding('utf-8')

目标

{'chen': 78, 'zhao': 70, 'xie': 67}
//这种字典,要对值进行按大小排序

生成字典

data_str=['xie','zhao','chen']
data_dic={k:random.randint(61,80) for k in data_str}

字典的常用方法

print data_dic.keys()
//打印字典的所有键
print data_dic.values()
//打印字典的所有值
prinr data_dic.items()
//返回列表形式的字典,(就是列表)可以使用列表索引list[1]选择元素
print data_dic.viewkeys()
//打印字典所有键的集合,集合可以用去交集并集去重复

方法一

print sorted(zip(data_dic.values(),data_dic.keys()))
//zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
//结果:[(64, 'xie'), (72, 'chen'), (75, 'zhao')]

方法二

print sorted(data_dic.items(),key=lambda x:x[1])
//sorted()中有key,cmp,reverse三种方法。
//结果:[('xie', 64), ('chen', 72), ('zhao', 75)]
//当然还可以转换成字典的形式
print dict([('xie', 64), ('chen', 72), ('zhao', 75)])

一般来说用的最多的是key,key接受一个函数。比如key=abs(绝对值),或者先定义一个函数,然后把这个函数赋给key

  1. cmp指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),如果第一个参数小于第二个参数,返回一个负数;如果第一个参数等于第二个参数,返回零;如果第一个参数大于第二个参数,返回一个正数。默认值为None。
  2. key指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字。默认值为None。
  3. reverse是一个布尔值。如果设置为True,列表元素将被倒序排列。

方法三

from collections import OrderedDict
//OrderedDict能够对字典的值进行排序,只打印键,需要注意的是要先把字典赋给OrderedDict
data_dic = OrderedDict()
data_dic={k:random.randint(61,80) for k in data_str}
for x in data_dic:print x
结果:chen
     zhao
     xie

    OrderedDict的方法适用于只看键的排序,应用程序一般用作按照值排序好之后,查看键。

字典合并

a = {'user':'langzi'}
b = {'sex':'man'}
a.update(b)
print a

输出结果:

{'user': 'langzi', 'sex': 'man'}