Skip to content

Latest commit

 

History

History
377 lines (258 loc) · 6.93 KB

File metadata and controls

377 lines (258 loc) · 6.93 KB
Error in user YAML: (<unknown>): found a tab character that violate indentation while scanning a plain scalar at line 3 column 3
---
- oeasy Python 0138
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
- 本教程同步发布在: 
	- 个人网站: `https://oeasy.org` 
	- 蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
	- GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
	- Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

字典类型

回忆

  • 上次学习了字典
    • 字典可以更新
      • update
      • {**d1,**d2}
    • 可以试着来
      • 试着设置字典项
        • setdefault
      • 试着获取字典项
        • get
    • 字典还可以直接赋值
  • 字典
    • 本质上是键值对的集合

图片描述

  • 字典具体可以怎么用呢?🤔

直接遍历

d = {'b': 2, 'a': 1, 'c': 3}
  • 想要 遍历 这个字典的
    1. keys
    2. values
    3. items
# 对键进行排序
keys = sorted(d.keys())
print(keys)

# 对值进行排序
values = sorted(d.values())
print(values)

# 对键值对进行排序(按键排序)
items = sorted(d.items())
print(items)
  • 都可以遍历

图片描述

  • 可以使用lambda表达式吗?

回忆lambda

score = [
	["oeasy", 89],
	["o2z", 96]
]
  • 对于可迭代对象l
    • 对于l中的每次迭代的x
    • 按照len(x[1])排序
# 根据子列表的第1个元素进行排序
shuxue = sorted(score, key=lambda x: x[1])
print(shuxue)
  • 排序的原则key
key=lambda x: len(x[1])
  • 效果

图片描述

字典排序

# 对字典的值进行排序
jiage = {'apple': 30, 'orange': 20, 'banana': 50, 'grapes': 10}
lst = sorted(jiage)
print(lst)  # 输出按值排序的键列表
  • 默认字典排序
    • 按照key排序
    • 字符串 序号ascii 排序
    • 返回列表

图片描述

  • 想要按照价格排序

交给ai

  • 按价格排序
jiage = {'apple': 30, 'orange': 20, 'banana': 50, 'grapes': 10}
____
将这个字典,按照价格排序

图片描述

  • 通过 items 把 字典 转化成 二维列表
    • 然后 再根据 lambda 对二维列表排序

代码

  • 对于jiage 这个dict可迭代对象
    • 每次迭代得到的x
    • 用这个 x[1]进行比较
      • 得到 水果的价格
  • 通过 dic_fruits_price["apple"] 得到 30
    • 以此类推
jiage = {'apple': 30, 'orange': 20, 'banana': 50, 'grapes': 10}

# 1. 按价格 升序 排序(便宜 → 贵)
asc = sorted(jiage.items(), key=lambda x: x[1])

# ========== 输出结果 ==========
print("按价格升序:", asc)
  • 将字典排序 转化为
    • 二维列表排序
    • 再排序

图片描述

  • 排序之后 可以
    • 把水果价格 列出来吗?

价格

  • 对于items的排序结果 asc
    • 是一个 元组的列表
asc
for fruit_name, price in asc:
    print(fruit_name, price, sep="->")

  • 遍历一下 这个二维列表就行

图片描述

武将字典

  • 想要得到 武力排名列表
heroes = {
	"刘备":{ "武力":60, "智力": 70 },
	"关羽":{ "武力":98, "智力": 90 },
	"张飞":{ "武力":99, "智力": 60 }
}
  • 应该怎么办呢?

询问ai

图片描述

  • items方法 可以完整保留 字典信息
    • 作为 排序依据

转化

  • 老方法
heroes.items()
lst = list(heroes.items())
  • 先用 items方法 将字典
    • 转化为 二维列表

图片描述

  • 这不就又成
    • 二维列表排序 了吗?

排序

  • 对 武力 排序
# 按照武力排序
wuli = sorted(lst, key=lambda x: x[1]['武力'], reverse=True)
for hero, stats in wuli:
    print(hero, ":", stats)
  • 效果

图片描述

  • 想把 武力 列出来

查询

  • stats是 当前英雄属性的 字典
    • 可以用 stats["武力"]
    • 索引到 具体数值
# 按照武力排序
wuli = sorted(lst, key=lambda x: x[1]['武力'], reverse=True)
for hero, stats in wuli:
    print(hero, ":", stats['武力'])
  • 效果

图片描述

智力

  • 对智力排序
# 按照智力排序
zhili = sorted(lst, key=lambda x: x[1]['智力'], reverse=True)
for hero, stats in zhili:
    print(hero, stats["智力"])
  • 结果

图片描述

  • 想看看具体的综合实力

综合实力

zonghe = sorted(heroes.items(), key=lambda x: x[1]['智力']+x[1]['武力'], reverse=True)
for hero, stats in zonghe:
    print(hero, ":", stats["武力"] + stats["智力"])
  • 关键还是 lambda的写法

图片描述

  • 现实中的问题

图片描述

武将排名

d = {"吕布": 1,"赵云": 2, "典韦": 3}
  • 1吕2赵3典韦

图片描述

  • 需要添加
    • 4关5马6张飞

交给ai

图片描述

  • 用字典 update字典
# 原始字典
d = {"吕布": 1, "赵云": 2, "典韦": 3}

# 要添加的新元素
d2 = {"关羽": 4, "马超": 5, "张飞": 6}

# 更新字典
d.update(d2)

# 输出更新后的字典
print(d)
  • 想把key和value对调

再交给ai

图片描述

# 原始字典
d = {'吕布': 1, '赵云': 2, '典韦': 3, '关羽': 4, '马超': 5, '张飞': 6}

# 创建一个新的字典,将键和值对调
inverted_d = {}

for key, value in d.items():
	inverted_d[value] = key

# 输出新的字典
print(inverted_d)
  • 结果
{1: '吕布', 2: '赵云', 3: '典韦', 4: '关羽', 5: '马超', 6: '张飞'}
  • 这和最初的原始字典哪个好呢?

询问ai

  • 一种是 用排名 查人名
  • 另一种是 用人名 查排名

图片描述

  • 就像 英译汉 、汉译英
    • 关键看需求
d = {1: '吕布', 2: '赵云', 3: '典韦', 4: '关羽', 5: '马超', 6: '张飞'}
l = ['吕布', '赵云', '典韦', '关羽', '马超', '张飞']
  • 这个 字典 和 列表 比较呢?

继续 问ai

图片描述

  • 序号从1开始、编号固定、不打乱 → 用 字典
  • 只要 顺序存放、遍历、省内存 → 用 列表
  • 没有谁绝对更好,看我们的场景来选

总结

  • 这次了解了 字典排序
  • 字典 可以排序
    • 先用 items 转化为 二维列表
    • 使用 lambda 进行排序

图片描述

  • ai环境下
    • 有什么有意思的字典 吗??🤔
  • 下次再说!👋

  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。