排序

items

1
2
d = {'k':1,'x':1}
u.items() # ==dict_items([('x', 1), ('k', 1)])

sorted(iterable,key,reverse)

sorted函数按key本身的值对字典排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from operator import itemgetter
d = {'a':1,'c':3,'d':444,'b':2}
# 在签名时挺有用的
for k, v in sorted(d.items(),key=lambda x:x[0]):
print(k,v)
sort_d = sorted(d.items(),key = itemgetter(0),reverse=False)
a = {'x': 1,'y': 2,'z': 3}
b = {'w': 10,'x': 11,'y': 2}
sorted(zip(a.values(),a.keys()))
# [(1, 'x'), (2, 'y'), (3, 'z')]
max(zip(a.values(),a.keys()))
# (3, 'z')
min(zip(a.keys(),a.values()))
# ('x',1)

对v值的排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from operator import itemgetter
rows = [
{'address': '5412 N CLARK', 'date': '07/01/2012'},
{'address': '5412 NIKE SHIRT', 'date': '07/01/2012'},
{'address': '5148 N CLARK', 'date': '07/04/2012'},
{'address': '5800 E 58TH', 'date': '07/02/2012'},
]
rows.sort(key=itemgetter('date'))
rows = sorted(rows,key=itemgetter('date'))
rows = sorted(rows, key=lambda x: x.get('date') \
if x.get('date') else '4000', reverse=False)
# 必須提供一個在排序过程中使用的函数,为每个元素创建一个key,然后按这个key来排序
a = ['femn','femn2014','fe','femnyy']
a.sort(key=len)
from itertools import groupby
# 按相同时间的值,进行分组
for date, items in groupby(rows, key=itemgetter('date')):
print(date)
for i in items:
print(' ', i)
# 输出如下
# 07/01/2012
# {'address': '5412 N CLARK', 'date': '07/01/2012'}
# {'address': '5412 NIKE SHIRT', 'date': '07/01/2012'}
# 07/04/2012
# {'address': '5148 N CLARK', 'date': '07/04/2012'}
# 07/02/2012
# {'address': '5800 E 58TH', 'date': '07/02/2012'}

join

如果你想要合并的字符串是在一个序列或者 iterable 中,那么最快的方式就是使用 join() 方法

1
2
3
data = ['ACME', 50, 91.1]
','.join(str(d) for d in data) # 'ACME,50,91.1'
(str(d) for d in data) #是一个 generator

random

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import random,string
v = [1, 2, 3, 4, 5, 6] # 一个序列或者 iterable
# 随机选择一个,且只能是选一个
random.choice(v)
# 随机提取N个,保证不重复出现,并且N不能超过v的长度
random.sample(v,3)
# 只是想打乱序列中的顺序
random.shuffle(v) # 此时v值的顺序已经被改变
# 生成一个随机的整数
random.randint(0,10)
''.join(random.choice(string.ascii_letters + string.digits) for _ in range(32))
''.join([random.choice(string.ascii_letters+string.digits) for _ in range(43)])
''.join(random.sample(string.ascii_letters+string.digits, 15))
Share Comments