小白如何成为python数据分析师

第9天---->字典(dict)

小学我们就学会了翻阅查询新华字典了,我们可以通过目录索引查询我们要找的字,便于理解学习这个字和字的含义。那么在编程语言中我们像字典的数据类型呢?还真有,也称为字典。就像《新华字典》中,每个字都有与它对应的解释一样,每个字和它的解释合在一起就是字典中的一个条目。在字典的字称为,字的解释称为键(key)和值(value)组成的条目称为键值对。字典={键:值, 键:值, 键:值, …}

当我们需要存储多个信息时,比如一个人的个人信息(姓名,年龄、性别、爱好、联系方法…),我们可以使用之前学过的列表、元组和集合,但是你会发现这些都不是最理想的选择。会有各自的问题。我们将一堆数据放进去,读取数据时,我们就会发现,这是个啥?因为没有声明,导致我们放进去的数据,读出来时,我们就不认识了。集合是最不合适的,因为集合有去重特性,如果一个人的年龄和体重相同,那么集合中就会少一项信息。查询时,我们得知道下标才好查找。不然就得一个一个的遍历查找,效率低下。这时就是字典拯救我们了。

我们可以通过很好的理解()数据含义,可以通过快速查询到

字典(dictionary)类型,这种数据类型最适合把相关联的信息组装到一起,并且可以帮助我们解决程序中为真实事物建模的问题

相信你已经对字典有了一定了解,下面我们就来更深入的学习字典吧!

创建和使用字典

1.字面量语法

在Python中创建字典可以使用{}字面量语法,跟列表、集合差不多。值得注意的是字典的{}中的元素是以键值对的形式存在的,每个元素由:分隔的两个值构成,:前面是键,:后面是值。

kuanglu = {'李淳罡': '天不生我李淳罡,剑道万古如长夜。','萧炎': '三十年河东,三十年河西,莫欺少年穷!','安澜': '仙之巅,傲世间,有我安澜便有天!','王腾': '我儿王腾有大帝之姿!'}
print(kuanglu['王腾'])person = {'name': '王大锤','age': 20,'weight': 60,'office': '科华北路62号','home': '中同仁路8号','tel': '13122334455','contacts': {'qq': 123456,'tel': 12345678910,'a': 45,'9': 58}
}
print(person['name'])
print(person['contacts']['qq'])
print(person['contacts']['a'])
print(person['contacts']['9'])

用字典来保存一个人的信息远远优于使用列表或元组,因为我们可以用:前面的键来表示条目的含义,而:后面就是这个条目所对应的值。

2.构造式语法(使用内置函数dict创建字典

# dict函数(构造器)中的每一组参数就是字典中的一组键值对
person = dict(name='安澜', age=99999999, weight=9999999, home='帝城')
print(person)    # {name='安澜', age=99999999, weight=9999999, home='帝城'}

3.通过Python内置函数zip压缩两个序列并创建字典

a = 'ABCDE'
b = '12345'
items1 = dict(zip(a, b))
# items1 = dict(zip('ABCDE', '12345'))
print(items1)    # {'A': '1', 'B': '2', 'C': '3', 'D': '4', 'E': '5'}
items2 = dict(zip('ABCDE', range(1, 10)))
print(items2)    # {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}

4.生成式语法创建字典

# 列表的生成式语法
list1 = [i for i in range(1, 10)]
print(list1)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 字典的的生成式语法
student2 = {i: i ** 2 for i in range(1, 10)}
print(student2) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

5.循环遍历字典

想知道字典中一共有多少组键值对,仍然是使用len函数;如果想对字典进行遍历,可以用for循环,但是需要注意,for循环只是对字典的键进行了遍历.

student = {'name': '安澜','age': 99999,'weight': 9999999,'office': '完美世界','home': '天渊原始帝城','tel': '唤我真名',}
print(len(student))    # 6# 遍历字典的键
for key in student.keys():print(key, student[key])# print(key)
print('-' * 10)
# 遍历字典的值
for value in student.values():print(value)
print('-' * 10)
# 遍历键值队
for key, value in student.items():print(key, value)
print('-' * 10)

字典的运算

对于字典类型来说,成员运算和索引运算肯定是最为重要的,前者可以判定指定的键在不在字典中,后者可以通过键获取对应的值或者向字典中加入新的键值对。

注意:字典的索引不同于列表的索引,列表中的元素因为有属于自己有序号(下标),所以列表的索引是一个整数;字典中因为保存的是键值对,所以字典的索引是键值对中的键,通过索引操作可以修改原来的值或者向字典中存入新的键值对。

字典也使用了哈希存储的方式,所以字典中的键必须是不可变类型,例如整数(int)、浮点数(float)、字符串(str)、元组(tuple)等类型的值;

列表(list)和集合(set)是不能作为字典中的键的,当然字典类型本身也不能再作为字典中的键,因为字典也是可变类型,但是字典可以作为字典中的值。

person = {'name': '安澜','age': 99999,'weight': 9999999,'office': '完美世界','home': '天渊原始帝城','tel': '唤我真名'
}
# 检查name和tel两个键在不在person字典中
print('name' in person, 'tel' in person)    # True False
# 通过age修将person字典中对应的值修改为250
if 'age' in person:person['age'] = 250
print(person)
# 通过索引操作向person字典中存入新的键值对
person['tel'] = '13122334455'
person['signature'] = '哪怕背负天渊,需一手托原始帝城,我安澜一样无敌世间!'# 检查person字典中键值对的数量
print(len(person))    # 7
# 对字典的键进行循环并通索引运算获取键对应的值
for key in person:print(f'{key}: {person[key]}')

需要注意,在通过索引运算获取字典中的值时,如指定的键没有在字典中,将会引发KeyError异常。这时我们可以所以get函数通过key获取value,如果key不存在,返回空值,不会报错。

# 使用get函数通过key获取value时,如果key不存在,返回空值,不会报错。
print(student.get('name'))
print(student.get('bgy'))

字典的方法

# 字典中的值又是一个字典(嵌套的字典)
students = {1001: {'name': '狄仁杰', 'sex': True, 'age': 22, 'place': '山西大同'},1002: {'name': '白元芳', 'sex': True, 'age': 23, 'place': '河北保定'},1003: {'name': '武则天', 'sex': False, 'age': 20, 'place': '四川广元'}
}# 使用get方法通过键获取对应的值,如果取不到不会引发KeyError异常而是返回None或设定的默认值
print(students.get(1002))    # {'name': '白元芳', 'sex': True, 'age': 23, 'place': '河北保定'}
print(students.get(1005))    # None
print(students.get(1005, {'name': '无名氏'}))    # {'name': '无名氏'}# 获取字典中所有的键
print(students.keys())      # dict_keys([1001, 1002, 1003])
# 获取字典中所有的值
print(students.values())    # dict_values([{...}, {...}, {...}])
# 获取字典中所有的键值对
print(students.items())     # dict_items([(1001, {...}), (1002, {....}), (1003, {...})])
# 对字典中所有的键值对进行循环遍历
for key, value in students.items():print(key, '--->', value)# 使用pop方法通过键删除对应的键值对并返回该值
stu1 = students.pop(1002)
print(stu1)             # {'name': '白元芳', 'sex': True, 'age': 23, 'place': '河北保定'}
print(len(students))    # 2
# stu2 = students.pop(1005)    # KeyError: 1005
stu2 = students.pop(1005, {})
print(stu2)             # {}# 使用popitem方法删除字典中最后一组键值对并返回对应的二元组
# 如果字典中没有元素,调用该方法将引发KeyError异常
key, value = students.popitem()
print(key, value)    # 1003 {'name': '武则天', 'sex': False, 'age': 20, 'place': '四川广元'}# setdefault可以更新字典中的键对应的值或向字典中存入新的键值对
# setdefault方法的第一个参数是键,第二个参数是键对应的值
# 如果这个键在字典中存在,更新这个键之后会返回原来与这个键对应的值
# 如果这个键在字典中不存在,方法将返回第二个参数的值,默认为None
result = students.setdefault(1005, {'name': '方启鹤', 'sex': True})
print(result)        # {'name': '方启鹤', 'sex': True}
print(students)      # {1001: {...}, 1005: {...}}# 使用update更新字典元素,相同的键会用新值覆盖掉旧值,不同的键会添加到字典中
others = {1005: {'name': '乔峰', 'sex': True, 'age': 32, 'place': '北京大兴'},1010: {'name': '王语嫣', 'sex': False, 'age': 19},1008: {'name': '钟灵', 'sex': False}
}
students.update(others)
print(students)      # {1001: {...}, 1005: {...}, 1010: {...}, 1008: {...}}

跟列表一样,从字典中删除元素也可以使用del关键字,在删除元素的时候如果指定的键索引不到对应的值,一样会引发KeyError异常,具体的做法如下所示。

dict1 = {'a': 100, 'b': 200, 'c': 300}
dict2 = {'d': 400, 'e': 500, 'f': 600, 'a': 250}# 更新(合并)
dict1.update(dict2)
print(dict1)# 删除---->键必须存在,不存在会产生keyerror
# del dict1['b']
# print(dict1)
print(dict1.pop('b'))# 删除末尾的键
dict2.popitem()

字典的应用

案例:

1.输入一段话,统计每个英文字母出现的次数。

# 1.输入一段话,统计每个英文字母出现的次数。
# 方法1import string
# 使用生成式生成字典:{所以小写英文字母:0}
results = {letter: 0 for letter in string.ascii_lowercase}
# print(results)
content = input('请输入: ').lower()  # .lower() 将输入的字符串中的英文转换为英文小写。
# 遍历循环输入的元素
for ch in content:# 如果有元素在字典results中if ch in results:#值加1results[ch] += 1
# print(results)
# 循环获取字典results的键和值
for key, value in results.items():print(f'{key}: {value:>2d}次')# 方法2.
sentence = input('请输入一段话: ')
counter = {}
for ch in sentence:if 'A' <= ch <= 'Z' or 'a' <= ch <= 'z':counter[ch] = counter.get(ch, 0) + 1
for key, value in counter.items():print(f'字母{key}出现了{value}次.')

2.输入一段话,统计每个英文单词出现的次数。

# 2.输入一段话,统计每个英文单词出现的次数。content = input('请输入: ').replace(',', ' ')  # 将输入字符串中的“,”转换成空格。便于以后拆分
content_now = content.split(' ')  # 通过空格拆分
results = {letter: 0 for letter in content_now}  # 建立字典
for word in content_now:if word in results:results[word] += 1
print(results)
for key, value in results.items():print(f'{key}:{value}次')

3.在一个字典中保存了股票的代码和价格,找出股价大于100元的股票并创建一个新的字典。

dict1 = {}
stocks = {'AAPL': 191.88,'GOOG': 1186.96,'IBM': 149.24,'ORCL': 48.44,'ACN': 166.89,'FB': 208.09,'SYMC': 21.29
}# 方法1.
for key, value in stocks.items():if value > 100:dict1[key] = value
print(dict1)
# 字典的生成式语法创建
dict2 = {key: value for key, value in stocks.items() if value > 100}
print(dict2)# 找出最大股价,最小股价的股票名称,
# 使用max函数,注意函数max,和min默认是比较键的大小。所以我们要指定比较方式”kry=“
# 方法1.找最大,最小
print(max(stocks, key=stocks.get)) # 找最大,按指定的值
print(min(stocks, key=stocks.get))# 方法2.# 可以通过Python内置函数zip压缩两个序列并创建字典,利用这个函数,我们将键和值相互换位,
dict4 = dict(zip(stocks.values(), stocks.keys()))
print(dict4)# 最大值和最小值的键。
# 键和值相互换位,比较是键(股价),输出值(股票名)[1]
print(max(zip(stocks.values(), stocks.keys()))[1])
print(min(zip(stocks.values(), stocks.keys()))[1])
# 分解动作
_, max_values = max(zip(stocks.values(), stocks.keys()))
print(max_values)# 股价从大到小排序
# 字典排序,sorted()
print(sorted(stocks, key=stocks.get, reverse=True))

Python中字典的应用及相关操作!相关推荐

  1. Python中字典的介绍以及常用操作

    1.字典的介绍 字典是另一种可变类型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示 ...

  2. python英语字典程序修改_详解如何修改python中字典的键和值

    我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a ...

  3. python中字典使用_python中字典的使用

    python中的字典的特性: 在字典中的元素是散列存放的,没有顺序, 在进行增删改查的时候使用字典中需要的关键字(key)即可. 一: 创建字典 1)直接定义一个: dict = {'ob1':'co ...

  4. python循环展示大写字母_python调用大写函数python中字典的循环遍历的两种方式

    开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...

  5. python字典修改键所对应值_详解如何修改python中字典的键和值

    我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a ...

  6. python中字典和集合的区别_Python中字典和集合学习小结

    映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元组等 包含可变对象的列表. ...

  7. Python中字典对象实现原理

    python中字典对象实现原理 注:字典类型是Python中最常用的数据类型之一,它是一个键值对的集合,字典通过键来索引,关联到相对的值,理论上它的查询复杂度是 O(1) 字典是Python的一种可变 ...

  8. python中可以作为定界符_在 Python 中,字典和集合都是用一对 作为定界符,字典的每个元素有两部分组成,即 和 ,其中 不允许重复。_学小易找答案...

    [多选题]路由器A的G0/0/1接口配置信息如下,下列说法正确的有?(多选) acl number 3000 rule 5 deny 17 rule 10 deny 89 rule 15 deny 6 ...

  9. 【Python】Python实战从入门到精通之四 -- 教你使用Python中字典

    本文是Python实战–从入门到精通系列的第四篇文章: Python实战从入门到精通第一讲–Python中的变量和数据类型 Python实战从入门到精通第二讲–Python中列表操作详解 Python ...

最新文章

  1. 保护云端数据的5个技巧
  2. 第十五届全国大学生智能汽车竞赛-室外光电ROS组预赛方案
  3. docker 常用命令(1)
  4. Java日历compareTo()方法与示例
  5. CVPR 2019 Oral | 京东目标检测算法ScratchDet的深入思考
  6. 运算器(串行加法器和并行加法器,ALU)
  7. OllyDbg 与 x64Dbg 与 Windbg 与 IDA 区别是什么?
  8. IPv4和IPv6比特转发率和包转发率的关系
  9. oom killer lmkd killer
  10. batchnomal_Linux Kernel 排程機制介紹 ? Loda's blog
  11. 逆元 阶乘逆元 数论 HDU 5651 xiaoxin juju needs help
  12. 标准声纹采集终端,为声纹库建设提供标准支撑,为声纹鉴定和比对提供坚实的基础!
  13. Java 版植物大战僵尸思路和源码分享!
  14. 一文看懂计算机视觉!7个专业术语别说你不知道!
  15. 或是独体字吗_独体字结构 独体结构的字有哪些字?
  16. 常见的 @Transactional 注解,你确定用对了吗?
  17. 全自动过滤器:全自动过滤器工作原理
  18. 如何利用小程序+插件快速开发app?
  19. 火山小视频伪原创怎么做
  20. 网络渗透作业之 wireshark抓包校园网

热门文章

  1. 「题解」300iq Contest 2 B Bitwise Xor
  2. 我的世界网易怎么调成java,网易版我的世界如何将单机地图改为联机地图
  3. 幼儿园手工之自制时钟_【手工】自制超炫的学生时钟教具
  4. 18款最值得推荐的免费视频编辑软件
  5. 浅析 - 阿里巴巴专家教你坚持写作
  6. 浙里办开发票据认证单点登陆、令牌获取用户信息
  7. 【佳学基因人工智能】ANACONDA下安装SCIPY
  8. Charles抓包工具测试实战
  9. 抓包精灵NetCapture APP抓包教程《齐全》
  10. cat实时监控-入门demo