[ Python入门教程 ] Python字典数据类型及基本操作
字典是Python中重要的数据类型,字典是由"键-值"对组成的集合,"键-值"对之间用逗号隔开,包含在一对花括号中。字典中的"值"通过"键"来引用。
创建字典
创建字典的格式如下:
dictionary = {key1:value1, key2:value2, ...}
创建实例如下:
dict = {} #空字典
dict1 = {'Lesson1': 'Python', 'Lesson2': 'Java', 'Lesson3': 'Shell')} #多元素字典
dict2 = {'lesson1': 'Python', lesson2': 'Java', 'lesson3': 'Shell')} #注意和dict1不同(lesson首字母小写),原因是字典中的键是区分大小写的
说明:字典的键是区分大小写的。
获取字典的值
访问字典中的元素有2种方法。第1种是通过key值获取相应的value值,第二种是通过字典函数get()来获取。
(1)通过key值获取相应的value值。语法格式为:value = dict[key]。具体实例如下:
>>> dict1 = {'Lesson1': 'Python'}
>>> dict1['Lesson1']
'Python'
>>> dict1['Lesson2'] #不存在对应的键值,返回KeyError报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Lesson2'
(2)通过get()函数获取value值,get()函数使用格式如下:
dict.get(key[,default_value])
说明:参数key表示字典的键值,参数default_value可以作为get()的返回值,默认值为None。如果指定default_value参数值,表示如果参数key键值在字典key列表中,则返回对应的value值,如果不在,则返回预先设定的default_value的值。具体实例如下所示:
>>> dict1 = {'Lesson1': 'Python'}
>>> dict1.get('Lesson1')
'Python'
>>> dict1.get('Lesson2')
>>> dict1.get('Lesson2','Perl')
'Perl'
添加字典元素
方法一:直接添加方法,使用格式如下:
dict[key] = value
如果键值key不在字典dict的key列表中,字典dict添加(key:value)的记录。如果已经在key列表中,则修改键值key对应的value值。
dict['Lesson3'] = 'Perl'
举个例子,假设字典dict中不存在键名为Lesson3的字符串,则直接添加。如果已存在,则刷新值为Perl字符串。实例如下:
>>> dict1 = {'Lesson1': 'Python'}
>>> dict1['Lesson3'] = 'Perl'
>>> dict1
{'Lesson3': 'Perl', 'Lesson1': 'Python'}
>>> dict1 = {'Lesson3': 'Python'}
>>> dict1['Lesson3'] = 'Perl'
>>> dict1
{'Lesson3': 'Perl'}
方法二:通过调用setdefault()函数方法实现。格式如下:
dict.setdefault(key[,default_value])
如果索引key在字典key列表中,则返回对应的value值,如果不在key列表中,则添加新索引key和value在字典中,并反馈default_value值,默认值 为None。使用实例如下:
>>> dict1 = {'Lesson1': 'Python'}
>>> dict1.setdefault('Lesson1')
'Python'
>>> dict1.setdefault('Lesson2')
>>> dict1
{'Lesson2': None, 'Lesson1': 'Python'}
>>> dict1.setdefault('Lesson3','Shell')
'Shell'
>>> dict1
{'Lesson3': 'Shell', 'Lesson2': None, 'Lesson1': 'Python'}
获取字典所有keys、Values或者key-valu键值对
(1)获取字典的所有"键"-"值"元素。通过调用字典的items()方法实现,返回的是(key,value)元组组成的列表。实例如下:
>>> dict1 = {'Lesson1': 'Python', 'Lesson2': 'Java', 'Lesson3': 'Shell'}
>>> dict1.items()
[('Lesson3', 'Shell'), ('Lesson2', 'Java'), ('Lesson1', 'Python')]
(2)获取字典的中key组成的列表。通过调用字典的keys()方法实现。实例如下:
>>> dict1 = {'Lesson1': 'Python', 'Lesson2': 'Java', 'Lesson3': 'Shell'}
>>> dict1.keys()
['Lesson3', 'Lesson2', 'Lesson1']
(3)获取字典的中value组成的列表。通过调用字典的values()方法实现。实例如下:
>>> dict1 = {'Lesson1': 'Python', 'Lesson2': 'Java', 'Lesson3': 'Shell'}
>>> dict1.values()
['Shell', 'Java', 'Python']
判断指定key是否存在字典
判断字典中是否存在键值为k的元素。通过调用字典has_key()方法实现。实例如下:
>>> dict1 = {'Lesson1': 'Python', 'Lesson2': 'Java', 'Lesson3': 'Shell'}
>>> dict1.has_key('Lesson1')
True
>>> dict1.has_key('Lesson4')
False
删除字典元素。
方法一:通过调用内置函数del实现。实例如下:
>>> dict1 = {'Lesson1': 'Python', 'Lesson2': 'Java', 'Lesson3': 'Shell'}
>>> del dict1['Lesson1']
>>> dict1
{'Lesson3': 'Shell', 'Lesson2': 'Java'}
方法二:通过调用字典的pop()函数实现。pop()函数格式如下:
dict.pop(key[,default_value])
pop()函数必须指定参数索引key才能删除对应的值。如果索引key在字典key列表中,则返回索引key对应的value值。如果不存在,则返回预先设置的default_value值,如果未设置,会爬出KeyError异常信息。实例如下:
>>> dict1 = {'Lesson1': 'Python', 'Lesson2': 'Java', 'Lesson3': 'Shell'}
>>> dict1.pop('Lesson3')
'Shell'
>>> dict1
{'Lesson2': 'Java', 'Lesson1': 'Python'}
>>> dict1.pop('Lesson3','Perl')
'Perl'
方法三:调用字典的clear()函数,清除字典的所有内容。实例如下:
>>> dict1 = {'Lesson1': 'Python', 'Lesson2': 'Java', 'Lesson3': 'Shell'}
>>> dict1.clear()
>>> dict1
{}
字典排序
字典的排序可以通过使用sorted()函数实现,实例如下:
>>> dict = {'2':"Python",'1':"Java",'3':"C++"}
>>> sorted(dict.items(),key=lambda d:d[0])
[('1', 'Java'), ('2', 'Python'), ('3', 'C++')]
>>> sorted(dict.items(),key=lambda d:d[1])
[('3', 'C++'), ('1', 'Java'), ('2', 'Python')]
也可以使用如下方法对值进行排序,先使用zip进行反转
>>> sorted(zip(prices.values(),prices.keys()))
[(10.75, 'FB'), (37.2, 'HPQ'), (45.23, 'ACME'), (205.55, 'IBM'), (612.78, 'AAPL')]
说明:如果存在values相同的情况下,则会按照key的大小进行排序。如下:
>>> prices = {'ACME': 45.23, 'AAPL': 612.78, 'IBM': 612.78, 'HPQ': 37.20,'FB': 10.75 }
>>> sorted(zip(prices.values(),prices.keys()))
[(10.75, 'FB'), (37.2, 'HPQ'), (45.23, 'ACME'), (612.78, 'AAPL'), (612.78, 'IBM')]
计算字典最大值和最小值
通过使用zip()将字典键和值反转,再使用min()和max()函数计算。
>>> prices = {'ACME': 45.23, 'AAPL': 612.78, 'IBM': 205.55, 'HPQ': 37.20,'FB': 10.75 }
>>> min_price = min(zip(prices.values(),prices.keys()))
>>> print(min_price)
(10.75, 'FB')
>>> max_price = max(zip(prices.values(),prices.keys()))
>>> print(max_price)
(612.78, 'AAPL')
获取字典相同元素
获取两个字典相同的键、值或者items。可以通过集合运算的方式获取。
>>> dic_a = {'x':1,'y':2,'z':3}
>>> dic_b = {'w':10,'x':11,'y':2}
>>> dic_a.keys() & dic_b.keys()
{'x', 'y'}
>>> dic_a.keys() - dic_b.keys()
{'z'}
>>> dic_a.items() & dic_a.items()
{('z', 3), ('x', 1), ('y', 2)}
这些类型的操作额可用来修改或过滤掉字典中的内容。使用字典推导式代码如下:
>>> dic_c = { key:dic_a[key] for key in dic_a.keys() - {'z','w'}}
>>> print(dic_c)
{'x': 1, 'y': 2}
创建有序字典
可以使用collections模块中的OrderedDict类,当对字典迭代时,它会严格按照元素初始添加的顺序进行。
>>> from collections import OrderedDict
>>> prices = OrderedDict()
>>> prices['ACME'] = 45
>>> prices['AAPL'] = 46
>>> prices['IBM'] = 47
>>> for key in prices:
... print(key,prices[key])
...
('ACME', 45)
('AAPL', 46)
('IBM', 47)
从字典中提取子集
从指定的字典中按照键或者值进行过滤获取字典子集。
>>> prices = {'ACME': 45.23, 'AAPL': 612.78, 'IBM': 205.55, 'HPQ': 37.20,'FB': 10.75 }
>>> p1 = {key:value for key, value in prices.items() if value > 20}
>>> print(p1)
{'HPQ': 37.2, 'AAPL': 612.78, 'ACME': 45.23, 'IBM': 205.55}
>>> tech_name = {'ACME', 'AAPL', 'IBM'}
>>> p2 = {key:value for key, value in prices.items() if key in tech_name}
>>> print(p2)
{'AAPL': 612.78, 'IBM': 205.55, 'ACME': 45.23}
找到最大或最小的N个元素
使用heapq模块中的两个函数nlargest()和nsmallest()获取最大和最小的N个元素。
>>> import heapq
>>> prices = {'ACME': 45.23, 'AAPL': 612.78, 'IBM': 205.55, 'HPQ': 37.20,'FB': 10.75 }
>>> large3_lst = heapq.nlargest(3,zip(prices.values(),prices.keys()))
>>> print(large3_lst)
[(612.78, 'AAPL'), (205.55, 'IBM'), (45.23, 'ACME')]
>>> small3_lst = heapq.nsmallest(3,zip(prices.values(),prices.keys()))
>>> print(small3_lst)
[(10.75, 'FB'), (37.2, 'HPQ'), (45.23, 'ACME')]
[ Python入门教程 ] Python字典数据类型及基本操作的更多相关文章
- [ Python入门教程 ] Python基础语法
Python的语法非常简练,因此用Python编写的程序可读性强.容易理解.本章将介绍Python的基本语法和概念. Python文件类型 1.源代码.Python的源代码的扩展名以py结尾,可直接运 ...
- boost.python入门教程 ----python 嵌入c++
Python语言简介 Python是一种脚本语言.以开放的开发接口和独特的语法著称.尽管Python在国内引起注意只有几年的时间,但实际上Python出现于上世纪90年代(据www.python.or ...
- [ Python入门教程 ] Python文件基本操作
本文将python文件操作实例进行整理,以便后续取用. 文件打开和创建 Python中使用open()函数打开或创建文件.open()的声明如下: open(name[, mode[, bufferi ...
- [ Python入门教程 ] Python文件基本操作_shutil模块
shutil模块是对os模块中文件操作的补充,提供文件和目录的移动.复制.打包.压缩.解压等功能 shutil常用函数 shutil.copyfile(src, dst) 复制文件, 如果ds ...
- [ Python入门教程 ] Python中JSON模块基本使用方法
JSON (JavaScript Object Notation)是一种使用广泛的轻量数据格式,Python标准库中的json模块提供了一种简单的方法来编码和解码JSON格式的数据.用于完成字符串和p ...
- [ Python入门教程 ] Python的控制语句
Python控制语句由条件语句.循环语句构成.控制语句根据条件表达式控制程序的流转.本章将介绍Python中控制语句的基本语法. 条件判断语句 (1)if条件语句 if语句用于检测某个条件是否成立.如 ...
- [ Python入门教程 ] Python中日期时间datetime模块使用实例
Python中datetime模块提供强大易用的日期处理功能,用于记录程序操作或修改时间.时间计算.日志时间显示等功能.datatime模块重新封装了time模块,提供的类包括date.time.da ...
- [ Python入门教程 ] Python中日志记录模块logging使用实例
python中的logging模块用于记录日志.用户可以根据程序实现需要自定义日志输出位置.日志级别以及日志格式. 将日志内容输出到屏幕 一个最简单的logging模块使用样例,直接打印显示日志内容到 ...
- [ Python入门教程 ] Python生成随机数模块(random)使用方法
1.使用randint(a,b)生成指定范围内的随机整数.randint(a,b)表示从序列range([a,b])中获取一个随机数,包括b. >>> random.randint( ...
随机推荐
- JS---DOM---点击操作---节点的方式---案例
点击操作---节点的方式---案例 案例1:点击按钮,设置p变色---节点的方式做 <!DOCTYPE html> <html lang="en"> < ...
- JS 测试 Prototype
JS 测试 Prototype 测试 JavaScript 框架库 - Prototype 引用 Prototype 如需测试 JavaScript 库,您需要在网页中引用它. 为了引用某个库,请使用 ...
- 从0系统学Android--3.1编写UI界面
从0系统学Android--3.1编写UI界面 本系列文章目录:更多精品文章分类 本系列持续更新中.... 界面设计和功能开发同样重要,界面美观的应用程序不仅可以大大增加用户粘性,还能帮我们吸引到更多 ...
- Mac环境下执行npm install报权限错误解决办法
1. 一般情况 sudo npm install 注:这相当于windows系统中的 以管理员身份执行,加上sudo后会要求你输入苹果账号密码,而且在输入的时候是没有字符提示的,密码输入完直接按回车就 ...
- 百度BAE专业版申购SSL证书
这几天开发了一个小程序,本来想放到BAE基础版的,但是基础版现在不能再新增项目了,想了一下,出点血,配了个专业版.但是专业版的SSL证书是需要配的,而小程序必须使用https,所有必须申请一个证书.在 ...
- 表单生成器(Form Builder)之mongodb表单数据查询——统计查询求和
上一篇笔记仅是记录了一下简单的关联查询,根据笔记中的场景:将某一车辆关联的耗损记录全部放在了一个字段当中.不知道现在中有没有这种场景,我们的应用中没有类似的场景,可能我们更关注的是某车辆的总耗损金额和 ...
- 《Web Development with Go》Middleware之使用gorilla.handlers
可以方便的使用日志和压缩等功能. package main import ( "fmt" "log" "net/http" "os ...
- jQuery入门和DOM对象
jQuery入门和DOM对象 1.开发准备 1. 下载的版本: jquery-3.3.1.min.js :压缩版,发布版84.8KB jquery-3.3.1.js :常规版,开发版265KB 2. ...
- 【使用篇二】SpringBoot整合SpringDataJPA(18)
一.pom.xml添加依赖 <dependencies> <!--web--> <dependency> <groupId>org.springfram ...
- 通过 Filebeat 收集 ubuntu 系统日志
需求:收集 ubuntu 系统日志,发送给 logstash,再由 logstash 把数据传递给 elasticsearch,最后通过 kibana 展示日志数据. Filebeat System ...