|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 极品召唤兽 于 2020-8-12 22:36 编辑
列表能进行一一对应 字典也可以做到
我们可以看到,字典 是由一对大括号({})包裹着的。和列表不同的是,字典的每个元素是 键值对,如 '林黛玉': 95,其中我们把 '林黛玉' 叫 键(key),95 叫 值(value),中间用冒号连接(:)。
需要注意的是,字典中的 键 需要是 唯一的,如果字典中有两个相同的 键,Python 只会保留后面那个。而 值 则没有限制,可以是任意类型的,也可以有相同的值。
- # 一行太长放不下的时候也可以换行
- scores = {
- '林黛玉': 95,
- '薛宝钗': 93,
- '贾宝玉': 78,
- '林黛玉': 78
- }
- print(scores)
- # 输出:{'林黛玉': 78, '薛宝钗': 93, '贾宝玉': 78}
复制代码
拓展:字典在 Python 3.6 之前无序的,所以创建字典时的顺序不影响结果。
字典的取值
接下来我们来看一下如何进行字典的取值。和列表类似,访问字典中的元素也使用方括号([])。不同的是,列表中括号内的是 索引,字典中括号内的是 键。看个例子你就明白了:
- scores = {
- '林黛玉': 95,
- '薛宝钗': 93,
- '贾宝玉': 78
- }
- print(scores['林黛玉'])
- # 输出:95
复制代码
字典元素的修改/添加/删除
字典元素的修改/添加/删除其实非常简单,我们来通过几个例子了解一下:
- scores = {
- '林黛玉': 95,
- '薛宝钗': 93,
- '贾宝玉': 78
- }
- # 修改
- scores['林黛玉'] = 90
- print(scores)
- # 输出:{'林黛玉': 90, '薛宝钗': 93, '贾宝玉': 78}
- # 添加
- scores['袭人'] = 85
- print(scores)
- # 输出:{'林黛玉': 90, '薛宝钗': 93, '贾宝玉': 78, '袭人': 85}
- # 删除
- del scores['林黛玉']
- print(scores)
- # 输出:{'薛宝钗': 93, '贾宝玉': 78, '袭人': 85}
复制代码
- scores = {
- '林黛玉': 95,
- '薛宝钗': 93,
- '贾宝玉': 78,
- '袭人': 85
- }
- print(scores.keys())
- # 输出:dict_keys(['林黛玉', '薛宝钗', '贾宝玉', '袭人'])
复制代码
- scores = {
- '林黛玉': 95,
- '薛宝钗': 93,
- '贾宝玉': 78,
- '袭人': 85
- }
- print(scores.values())
- # 输出:[95, 93, 78, 85]
复制代码
items()
用于获取字典中所有的 键 + 值 元组。
- scores = {
- '林黛玉': 95,
- '薛宝钗': 93,
- '贾宝玉': 78,
- '袭人': 85
- }
- print(scores.items())
- # 输出:[('林黛玉', 95), ('薛宝钗', 93), ('贾宝玉', 78), ('袭人', 85)]
- # 使用循环遍历字典的键和值
- for name, score in scores.items():
- print('%s的分数是:%d' % (name, score))
- # 输出:
- # 林黛玉的分数是:95
- # 薛宝钗的分数是:93
- # 贾宝玉的分数是:78
- # 袭人的分数是:85
复制代码
注意:keys()、values() 和 items() 方法在 Python3 中返回的是有序序列,必要时需要用 list() 函数转换成列表使用,如 list(scores.keys())。
get()
通过 键 获取字典对应的值,当 键 不存在于字典当中时不会报错,而是默认返回 None,也可以通过第二个参数设置不存在时的默认返回值。
- scores = {
- '林黛玉': 95,
- '薛宝钗': 93,
- '贾宝玉': 78,
- '袭人': 85
- }
- print(scores.get('林黛玉'))
- # 输出:95
- print(scores.get('小贝'))
- # 输出:None
- print(scores.get('小贝', '小贝没参加编程考试'))
- # 输出:小贝没参加编程考试
复制代码
字典嵌套
我们之前说过,字典的 键 是 唯一不可变的,而字典的 值 是没有限制的。所以,当字典的值为字典时,就形成了字典的嵌套。举个例子:
- scores = {
- '编程一班': {
- '林黛玉': 95,
- '贾宝玉': 78
- },
- '编程二班': {
- '薛宝钗': 93,
- '袭人': 85
- }
- }
- print(scores)
- # 输出:{'编程一班': {'林黛玉': 95, '贾宝玉': 78}, '编程二班': {'薛宝钗': 93, '袭人': 85}}
复制代码
嵌套字典要怎么取值呢?其实很简单,比如我们要访问林黛玉的分数,首先访问第一层 编程一班,接着再访问里面的 林黛玉 即可。
- scores = {
- '编程一班': {
- '林黛玉': 95,
- '贾宝玉': 78
- },
- '编程二班': {
- '薛宝钗': 93,
- '袭人': 85
- }
- }
- print(scores['编程一班'])
- # 输出:{'林黛玉': 95, '贾宝玉': 78}
- print(scores['编程一班']['林黛玉'])
- # 输出:95
复制代码
- temperatures = {'country': '中国', 'provinces': [
- {
- 'name': '江苏', 'cities': [
- {'name': '南京', 'temperature': '32度'},
- {'name': '苏州', 'temperature': '31度'}]
- },
- {
- 'name': '四川', 'cities': [
- {'name': '成都', 'temperature': '37度'},
- {'name': '绵阳', 'temperature': '34度'}]
- },
- {
- 'name': '广东', 'cities': [
- {'name': '深圳', 'temperature': '30度'},
- {'name': '广州', 'temperature': '33度'}]
- }
- ]}
- for province in temperatures['provinces']:
- for city in province['cities']:
- print('{}-{}的温度是{}'.format(province['name'], city['name'], city['temperature']))
复制代码
死亡练习
大家肯定都摇过 🎲,我们知道一个骰子有六个面,分别对应 1-6 六个数字,这六个数字出现的概率是一样的,都是六分之一(0.166666...)。
接下来我们来用 Python 验证一下,我们摇 1000 次骰子并统计每个数字出现的次数,然后将每个数字出现的次数除以总次数得出每个数字出现的概率。
Tips:使用 random.choice() 来模拟摇骰子。
- import random
- b = {"1": 0, "2": 0, "3": 0, "4": 0, "5": 0, "6": 0}
- t = 2000
- for i in range(t):
- a = random.choice(('1','2','3','4','5','6'))
- b[a] +=1
-
- for a,b in b.items():
- print('数字{}的概率是{}'.format(a,b/t))
复制代码
|
|