美文网首页
python高级编程技巧(2)

python高级编程技巧(2)

作者: 我是一条池中鱼 | 来源:发表于2017-10-11 22:30 被阅读0次

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

实际案例:

  1. 某班英语成绩以字典形式存储为:
    {"LiLei": 79, "Jim" : 88, "Lucy": 90}
    根据成绩高低计算学生排名
解决方案:

使用内置函数sroted

  1. 利用zip将字典数据转化元组
  2. 传递sorted函数的key参数
代码示例:
# _*_ coding:utf-8 _*_
# @Author   : TianYu
# @Time     : 2017/10/9 15:22
# @File     : 对字典中的项进行排序.py

from random import randint

d = {x: randint(60,100) for x in "xyzabc"} #生成随机的字典数据
print(d)
#方法 1
s= list(zip(d.values(), d.keys())) # zip(iter1 [,iter2 [...]]) --> zip object
print(sorted(s))

#方法 2
print(d.items())
print(sorted(d.items(), key=lambda x: x[1]))

二. 如何快速找到多个字典中的公共键(key)

实际案例:

  1. 西班牙足球甲级联赛,每轮球员进球统计:
    第一轮:{'苏雷亚斯' : 1, '梅西' :2, '本泽马': 1, 'C罗': 3 ...}
    第二轮:{'苏雷亚斯' : 2, 'C罗' :1, '格里兹曼': 3, '贝尔': 1 ...}
    第三轮:{'苏雷亚斯' : 1, '托雷斯' :2, '贝尔': 1, '内马尔': 1 ...}
    ......
    统计出前N轮,每场比赛都有进球的球员
解决方案:

利用集合set的交集操作
step1.使用字典的keys()方法,得到一个字典keys的集合
step2. 使用map函数,得到所有字典的keys的集合
step3. 使用functools中的reduce函数,取所有字典的keys的集合的交集

代码示例:
#!usr/bin/env python3
# _*_ coding:utf-8 _*_
# @Author   : TianYu
# @Time     : 2017/9/18 19:39
# @File     : 草稿本.py

from random import randint, sample
#sample 函数随机取样
#取三个样本字典数据
s1 = {x: randint(1,4) for x in sample('abcdefg', randint(3,6))}
s2 = {x: randint(1,4) for x in sample('abcdefg', randint(3,6))}
s3 = {x: randint(1,4) for x in sample('abcdefg', randint(3,6))}
print(s1, s2, s3)

#方法 1 (不推荐,容易造成内存浪费或者效率较低)
res = []
for k in s1:
    if k in s2 and k in s3:
        res.append(k)
print(res)

#方法 2
print(s1.keys() & s2.keys() & s3.keys())#集合的交集

#方法 3
from functools import reduce

ss = reduce(lambda a, b: a & b,map(dict.keys,[s1,s2,s3]) )#map函数和reduce函数的使用,可以对N个字典进行处理
print(ss)

三. 如何让字典保持有序

实际案例:

  1. 某编程竞赛系统,对参赛选手编程解题进行计时,选手完成题目后,把该选手解题用时记录到字典中,以便赛后按选手名查询成绩(答题用时越短,成绩越优)
    {'LiLei':(2,43), 'HanMeimei':(5,52), 'Jim':(1,39) ...}
    比赛结束后,需按排名顺序依次打印选手成绩,如何实现?
解决方案:

使用collections.OrderedDict

  1. OrderedDict替代内置字典dict,依次将选手成绩存入OrderedDict
代码示例:
# _*_ coding:utf-8 _*_
# @Author   : TianYu
# @Time     : 2017/10/9 15:48
# @File     : 字典保持有序.py

from collections import OrderedDict
d = OrderedDict()#使用OrderedDict代替内置的字典
d['Jin'] = (1,35)
d['Bob'] = (2,33)
d['Leo'] = (3,38)
for k in d:
    print(k)#根据字典的进入顺序进行遍历


#使用OrderedDict有序字典的例子
from time import time
from random import randint

d = OrderedDict()
plays = list('ABCDEFGH')  #选手列表['A', 'B', 'C', ...'H' ]
start = time()

print("提示:按Enter键或者输入字符:")
for i in range(8):
    input()  #可做延时处理
    p = plays.pop(randint(0, 7 - i)) #在列表中随机选取元素,之后pop掉,相当于“答完题离场”
    end = time()
    print(i + 1, p, end - start),  #打印 排名、选手名、成绩(时间)
    d[p] = (i + 1, end - start)
print()
print('-' * 20)
for k in d:
    print(k, d[k])

要努力要奋斗

相关文章

  • python高级编程技巧(2)

    一. 如何根据字典中值的大小,对字典中的项进行排序 实际案例: 某班英语成绩以字典形式存储为:{"LiLei": ...

  • Python高级编程技巧

    本文展示一些高级的Python设计结构和它们的使用方法。在日常工作中,你可以根据需要选择合适的数据结构,例如对快速...

  • python高级编程技巧(3)

    一. 如何实现用户的历史记录功能 实际案例: 很多应用程序都有浏览用户的历史记录的功能,例如:浏览器可以查看最近访...

  • python高级编程技巧(8)

    一. 如何将文件映射到内存? 实际案例: 在访问某些二进制文件时。希望能把文件映射到内存中,可以实现随机访问。(f...

  • python高级编程技巧(6)

    一. 如何将多个小字符串拼接成一个大的字符串 实际案例: 在设计某网络程序时,我们自定义了一个基于UDP的网络协议...

  • python高级编程技巧(5)

    一. 如何拆分含有多种分隔符的字符串 实际案例: 我们要把某个字符串依据分隔符号拆分不同的字段,该字符串包含多种不...

  • python高级编程技巧(4)

    一. 如何进行反向迭代以及如何实现反向迭代 实际案例: 实现一个连续浮点数发生器FloatRange(和xrang...

  • python高级编程技巧(7)

    一. 如何读写文本文件 实际案例: 某文本文件编码格式已知(如UTF-8,GBK,BIG5),在Python2.x...

  • python高级编程技巧(1)

    一. 如何在列表、字典、集合中根据条件筛选数据 实际案例: 过滤掉列表[3,6,7,9,-1,-2,...]中的负...

  • python高级编程2

    1.元类 1.1.1类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这...

网友评论

      本文标题:python高级编程技巧(2)

      本文链接:https://www.haomeiwen.com/subject/sasgyxtx.html