# 由 sort 中 key 的用法浅谈 python

1. Python 中常用的优化技巧（能够提升 Python 执行效率的，除了算法层面）
2. 按照 value 从小到大输出 dict 中的 key-value值。

## 从排序说起！

``sort([cmp[, key[, reverse]]]) ``

``>>> l = [43, 12, 4, 6] >>> l.sort() >>> l [4, 6, 12, 43] ``

## sort 之美

``>>> d = {1: 'z', 2:'y', 3: 'x'} >>> print sorted(d.items(), key=lambda x: x[1]) [(3, 'x'), (2, 'y'), (1, 'z')] ``

``>>> from collections import OrderedDict >>> sorted_d = OrderedDict(sorted(d.items(), key=lambda x: x[1])) >>> sorted_d OrderedDict([(3, 'x'), (2, 'y'), (1, 'z')]) ``

## sort 之魅

• 所有的小写字母在大写字母前面
• 所有的字母在数字前面
• 所有的奇数在偶数前面

key parameter to specify a function to be called on each list element prior to making comparisons. The value of the key parameter should be a function that takes a single argument and returns a key to use for sorting purposes.

``>>> s = "Sorting1234" >>> "".join(sorted(s, key=lambda x: (x.isdigit(), x.isdigit() and int(x) % 2 == 0, x.isupper(), x.islower(), x))) 'ginortS1324' ``

## 再探 Python

Python 是一门简单方便的语言，相信这是大部分人对 Python 的第一感觉。初学 Python，我们可能痴迷于 Python 的列表解析，list 切片，字典推导，或者是陶醉在各种强大的第三方库里，比如网络库 requests，科学计算库 numpy，web开发框架 Django 等。

``def isPalindrome(x):     if x < 0:         return False     reversed_x = 0     original_x = x     while x > 0:         reversed_x = reversed_x * 10 + x % 10         x /= 10     return reversed_x == original_x ``

``def isPalindrome(x):     return x >= 0 and str(x) == str(x)[::-1] ``

``# 函数式编程 >>> nums = map(int, "123456789" ) >>> nums [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) 15 >>> sum(nums) 45 # 生成器 >>> mygenerator = (x*x for x in range(3)) >>> for i in mygenerator: ...     print i ... 0 1 4 >>> for i in mygenerator: ...     print i ... # lambda 匿名函数 >>> c = lambda *z: z >>> c( 10, 'test') (10, 'test') # 迭代 >>> l = [i**2 for i in range(9)] >>> l_iter = iter(l) >>> next(l_iter) 0 >>> next(l_iter) 1 >>> next(l_iter) 4 # 数据结构 set >>> set_a = set([i for i in range(1,9,2)]) >>> set_b = set([i for i in range(0,9,2)]) >>> print set_a | set_b set([0, 1, 2, 3, 4, 5, 6, 7, 8]) ``

``def reverseBits(n):     bit_str = '{0:032b}'.format(n)     reverse_str = bit_str[::-1]     return int(reverse_str, 2) ``

Python 是一门高效、简单、方便的语言，但这并不意味你不花时间就可以用的很好。