python中字典如何按照value值排序,并分别取出前n个value值和key值?
before = {
"key1": 5,
"key2": 6,
"key3": 4,
"key4": 3,
}
# 排序
after = dict(sorted(before.items(), key=lambda e: e[1]))
print(after)
# 取出前几个, 也可以在sorted返回的list中取前几个
cnt = 0
for key, value in after.items():
cnt += 1
if cnt > required_cnt:
break
print("{}:{}".format(key, value))
python字典有多个值的排序~
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!
>>> mapper{1: ['a', 'b', 'c'], 2: ['d'], 3: ['e'], 4: ['f', 'g'], 5: ['h'], 6: ['i'], 7: ['a', 'g']}>>> def itertransfer(mapper):... for k, values in mapper.items():... for v in values:... yield (k, v)... >>> for k, v in itertransfer(mapper):... print k, v... 1 a1 b1 c2 d3 e4 f4 g5 h6 i7 a7 g>>> >>> result = []>>> for k, v in mapper.items():... result.extend(zip([k,]*len(v), v))... >>> result[(1, 'a'), (1, 'b'), (1, 'c'), (2, 'd'), (3, 'e'), (4, 'f'), (4, 'g'), (5, 'h'), (6, 'i'), (7, 'a'), (7, 'g')]>>>