鱼C论坛

 找回密码
 立即注册
查看: 1809|回复: 4

[学习笔记] Python学习笔记21-----字典学习 New!

[复制链接]
发表于 2020-8-12 22:36:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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}



                               
登录/注册后可看大图



keys()
用于获取字典中所有的 键。

scores = {
  '林黛玉': 95,
  '薛宝钗': 93,
  '贾宝玉': 78,
  '袭人': 85
}
print(scores.keys())
# 输出:dict_keys(['林黛玉', '薛宝钗', '贾宝玉', '袭人'])

values()
用于获取字典中所有的 值。

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))




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-14 18:17:20 | 显示全部楼层

回帖奖励 +1 鱼币

鱼币鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-14 18:18:07 | 显示全部楼层

回帖奖励 +1 鱼币

我要鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-14 18:18:50 | 显示全部楼层
舒服
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-14 18:19:34 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 07:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表