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}- 想要 遍历 这个字典的
- keys
- values
- items
# 对键进行排序
keys = sorted(d.keys())
print(keys)
# 对值进行排序
values = sorted(d.values())
print(values)
# 对键值对进行排序(按键排序)
items = sorted(d.items())
print(items)- 都可以遍历
- 可以使用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 排序
- 返回列表
- 想要按照价格排序
- 按价格排序
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 }
}
- 应该怎么办呢?
- 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张飞
- 用字典 update字典
# 原始字典
d = {"吕布": 1, "赵云": 2, "典韦": 3}
# 要添加的新元素
d2 = {"关羽": 4, "马超": 5, "张飞": 6}
# 更新字典
d.update(d2)
# 输出更新后的字典
print(d)
- 想把key和value对调
# 原始字典
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: '张飞'}
- 这和最初的原始字典哪个好呢?
- 一种是 用排名 查人名
- 另一种是 用人名 查排名
- 就像 英译汉 、汉译英
- 关键看需求
d = {1: '吕布', 2: '赵云', 3: '典韦', 4: '关羽', 5: '马超', 6: '张飞'}
l = ['吕布', '赵云', '典韦', '关羽', '马超', '张飞']
- 这个 字典 和 列表 比较呢?
- 要 序号从1开始、编号固定、不打乱 → 用 字典
- 只要 顺序存放、遍历、省内存 → 用 列表
- 没有谁绝对更好,看我们的场景来选
- 这次了解了 字典排序
- 字典 可以排序
- 先用 items 转化为 二维列表
- 使用 lambda 进行排序
- ai环境下
- 有什么有意思的字典 吗??🤔
- 下次再说!👋
- 本文来自 oeasy Python 系统教程。
- 想完整、扎实学 Python,
- 搜索 oeasy 即可。



















