加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

7.python3实用编程技巧进阶(二)

发布时间:2020-12-20 10:59:52 所属栏目:Python 来源:网络整理
导读:1.5.如何根据字典中值的大小,对字典中的项进行排序 第一种方法:列表解析 # 1.5.如何根据字典中值的大小,对字典中的项进行排序 from random import randintd = {k: randint(60,100) for k in ‘ abcdefg ‘ } print (d) # 第一种方法:使用列表解析或者zip

1.5.如何根据字典中值的大小,对字典中的项进行排序

第一种方法:列表解析

# 1.5.如何根据字典中值的大小,对字典中的项进行排序

from random import randint

d = {k: randint(60,100) for k in abcdefg}
print(d)
#第一种方法:使用列表解析或者zip()函数,把字典的keys和values反转过来
list1 = [(v,k) for k,v in d.items()]
#或者使用zip()函数
# list2 = list(zip(d.values(),d.keys()))
print(list1)
list1 = sorted(list1,reverse=True)
print(list1)

第二种使用sorted

# 1.5.如何根据字典中值的大小,对字典中的项进行排序

from random import randint

d = {k: randint(60,d.keys()))

list1 = sorted(list1,reverse=True)


#第二种方法:使用sorted排序
p = sorted(d.items(),key=lambda item:item[1],reverse=True)
print(p)     #[(‘a‘,97),(‘b‘,93),(‘d‘,(‘e‘,92),(‘f‘,76),(‘c‘,66),(‘g‘,61)]

#对分数添加一个排名
d = {k:(i,v) for i,(k,v) in enumerate(p,1)}
print(d)    #{‘g‘: (1,‘d‘: (2,‘f‘: (3,91),‘c‘: (4,79),‘a‘: (5,78),‘e‘: (6,67),‘b‘: (7,64)}

1.6.如何统计序列中元素的频度

# 1.6如何统计序列中元素的频度
from random import randint
from collections import Counter

data = [randint(1,5) for _ in range(1,20)]
print(data)   #[5,2,1,5,3,4,5]

#计算频度最高的是三个数
c = Counter(data)
print(c.most_common(3))    #[(1,5),(3,4),(2,4)]

1.7.如何快速找到多个字典中的公共键

# 1.7.如何快速找到多个字典中的公共键

from random import randint,sample
from functools import reduce

d1 = {k:randint(1,4) for k in sample(abcdefgh,randint(3,6))}
d2 = {k:randint(1,6))}
d3 = {k:randint(1,6))}

#1.使用字典的keys()方法,得到一个字典keys的集合
#2.使用map函数,得到每个字典keys的集合
#3.使用reduce,取所有字典keys集合的交集

dl = [d1,d2,d3]
#找到三个字典中相同的keys
result = reduce(lambda a,b: a & b,map(dict.keys,dl))
print(result)

?1.8.如何让字典保持有序

# 1.8.如何让字典保持有序

from collections import OrderedDict
from itertools import islice

d = OrderedDict()
d[e] = 5
d[d] = 4
d[c] = 3
d[b] = 2
d[a] = 1

print(d)    #OrderedDict([(‘e‘,3),2),(‘a‘,1)])

#OrderedDict字典,在迭代操作时,它会保持元素被插入时的顺序

def query_by_order(d,a,b =None):
    if b is None:
        b = a + 1
    return list(islice(d,b))

#第五个key
res1 = query_by_order(d,4)
print(res1)     #[‘a‘]

#第二个和第三个key
res2 = query_by_order(d,3)
print(res2)     #[‘d‘,‘c‘]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读