Python3 字典dictionary入门基础附实例


Posted in Python onFebruary 10, 2020

Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典由键和对应值成对组成。字典也被称作关联数组或哈希表。

注意:

1、每个键与值用冒号隔开(:),每对用逗号,每对用逗号分割,整体放在花括号中({})。

2、键必须独一无二,但值则不必。

3、值可以取任何数据类型,但必须是不可变的,如字符串,数或元组。

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

d = {key1 : value1, key2 : value2 }

键必须是唯一的,但值则不必。

值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

一个简单的字典实例:

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

也可如此创建字典:

dict1 = { 'abc': 456 }
dict2 = { 'abc': 123, 98.6: 37 }

访问字典里的值

把相应的键放入到方括号中,如下实例:

实例

#!/usr/bin/python3
 
dict = {'Name': '3water.com', 'Age':13, 'Class': 'Second'}
print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])

以上实例输出结果:

dict['Name']: 3water.com
dict['Age']: 13

如果用字典里没有的键访问数据,会输出错误如下:

#!/usr/bin/python3
 
dict = {'Name': '3water.com', 'Age':13, 'Class': 'Second'}
print ("dict['Alice']: ", dict['Alice'])

以上实例输出结果:

Traceback (most recent call last):
File "F:\python\test.py", line 4, in <module>
print ("dict['Alice']: ", dict['Alice'])
KeyError: 'Alice'

修改字典

向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例:

#!/usr/bin/python3
 
dict = {'Name': '3water.com', 'Age':13, 'Class': 'Second'}
 
dict['Age'] = 8    # 更新 Age
dict['School'] = "三水点靠木" # 添加信息 
 
print ("dict['Age']: ", dict['Age'])
print('dict["Age"]:',dict['Age']) 
print ("dict['School']: ", dict['School'])

以上实例输出结果:

dict['Age']: 8
dict["Age"]: 8
dict['School']: 三水点靠木

发现了没 外面单引号里面就用双引号,外面是双引号里面就用单引号都可以输出

删除字典元素

能删单一的元素也能清空字典,清空只需一项操作。

显示删除一个字典用del命令,如下实例:

#!/usr/bin/python3
 
dict = {'Name': '3water.com', 'Age':13, 'Class': 'Second'}
 
del dict['Name'] # 删除键 'Name'
dict.clear()  # 清空字典
del dict   # 删除字典
 
print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])

但这会引发一个异常,因为用执行 del 操作后字典不再存在:

Traceback (most recent call last):
File "F:\python\test.py", line 9, in <module>
print ("dict['Age']: ", dict['Age'])
TypeError: 'type' object is not subscriptable

注:del() 方法后面也会讨论。

字典键的特性

字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。

两个重要的点需要记住:

1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:

#!/usr/bin/python3
 
dict = {'Name': '3water.com', 'Age': 13, 'Name': '三水点靠木'}
print ("dict['Name']: ", dict['Name'])

以上实例输出结果:

dict['Name']: 三水点靠木

2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行,如下实例:

#!/usr/bin/python3 
dict = {['Name']: '3water.com', 'Age': 7}
 
print ("dict['Name']: ", dict['Name'])

以上实例输出结果:

Traceback (most recent call last):
File "F:\python\test.py", line 2, in <module>
dict = {['Name']: '3water.com', 'Age': 7}
TypeError: unhashable type: 'list'

字典内置函数&方法

Python字典包含了以下内置函数:

序号 函数及描述 实例
1 len(dict) 计算字典元素个数,即键的总数。 >>> dict = {'Name': '3water.com', 'Age': 13, 'Class': 'First'} >>> len(dict) 3
2 str(dict) 输出字典,以可打印的字符串表示。 >>> dict = {'Name': '3water.com', 'Age': 13, 'Class': 'First'} >>> str(dict) "{'Name': '3water.com', 'Class': 'First', 'Age': 13}"
3 type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。 >>> dict = {'Name': '3water.com', 'Age': 13, 'Class': 'First'} >>> type(dict)
cmp(dict1, dict2) #比较两个字典元素。
len(dict)    #计算字典元素个数,即键的总数。
str(dict)    #输出字典可打印的字符串表示。
type(variable)  #返回输入的变量类型,如果变量是字典就返回字典类型。

Python字典包含了以下内置方法:

序号 函数及描述
1 radiansdict.clear() 删除字典内所有元素
2 radiansdict.copy() 返回一个字典的浅复制
3 radiansdict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
4 radiansdict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
5 key in dict 如果键在字典dict里返回true,否则返回false
6 radiansdict.items() 以列表返回可遍历的(键, 值) 元组数组
7 radiansdict.keys() 返回一个迭代器,可以使用 list() 来转换为列表
8 radiansdict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
9 radiansdict.update(dict2) 把字典dict2的键/值对更新到dict里
10 radiansdict.values() 返回一个迭代器,可以使用 list() 来转换为列表
11 pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
12 popitem() 随机返回并删除字典中的最后一对键和值。
radiansdict.clear() #删除字典内所有元素
radiansdict.copy() #返回一个字典的浅复制
radiansdict.fromkeys() #创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
radiansdict.get(key, default=None) #返回指定键的值,如果值不在字典中返回default值
radiansdict.items() #以列表返回可遍历的(键, 值) 元组数组
radiansdict.keys() #以列表返回一个字典所有的键
radiansdict.setdefault(key, default=None) #和get()类似, 但如果键不已经存在于字典中,将会添加键并将值设为default
radiansdict.update(dict2) #把字典dict2的键/值对更新到dict里
radiansdict.values() #以列表返回字典中的所有值

下面是一些实例方便大家更好的理解字典的使用

字典的键值是"只读"的,所以不能对键和值分别进行初始化,即以下定义是错的:

>>> dic = {}
>>> dic.keys = (1,2,3,4,5,6)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'dict' object attribute 'keys' is read-only
>>> dic.values = ("a","b","c","d","e","f")
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'dict' object attribute 'values' is read-only
>>>

字典是支持无限极嵌套的,如下面代码:

cities={
 '北京':{
  '朝阳':['国贸','CBD','天阶','我爱我家','链接地产'],
  '海淀':['圆明园','苏州街','中关村','北京大学'],
  '昌平':['沙河','南口','小汤山',],
  '怀柔':['桃花','梅花','大山'],
  '密云':['密云A','密云B','密云C']
 },
 '河北':{
  '石家庄':['石家庄A','石家庄B','石家庄C','石家庄D','石家庄E'],
  '张家口':['张家口A','张家口B','张家口C'],
  '承德':['承德A','承德B','承德C','承德D']
 }
}

可以使用如下方法进行列出

for i in cities['北京']:
print(i)

将列出如下结果:

朝阳
海淀
昌平
怀柔
密云

for i in cities['北京']['海淀']:
print(i)

输出如下结果:

圆明园
苏州街
中关村
北京大学

用字典记录学生名字和分数,再分级:

#!/usr/bin/python3

students= {}
write = 1
while write :
 name = str(input('输入名字:'))
 grade = int(input('输入分数:'))
 students[str(name)] = grade
 write= int(input('继续输入?\n 1/继续 0/退出'))
print('name rate'.center(20,'-'))
for key,value in students.items():
 if value >= 90:
  print('%s %s A'.center(20,'-')%(key,value))
 elif 89 > value >= 60 :
  print('%s %s B'.center(20,'-')%(key,value))
 else:
  print('%s %s C'.center(20,'-')%(key,value))

测试输出结果:

输入名字:a
输入分数:98
继续输入?
1/继续 0/退出1
输入名字:b
输入分数:23
继续输入?
1/继续 0/退出0
-----name rate-----
------a 98 A------
------b 23 C------

字典可以通过以下方法调换 key和 value,当然要注意原始 value 的类型,必须是不可变类型:

dic = {
 'a': 1,
 'b': 2,
 'c': 3,
}

reverse = {v: k for k, v in dic.items()}

print(dic)
print(reverse)

输出如下:

{'a': 1, 'b': 2, 'c': 3}
{1: 'a', 2: 'b', 3: 'c'}

循环显示字典 key 与 value 值:

b= {'a':'3water.com','b':'baidu'}
for i in b.values():
 print(i)
for c in b.keys():
 print(c)

执行输出结果为:

3water.com
baidu
a
b

字典字段的比较

获取字典中最大的值及其键:

prices = {
 'A':123,
 'B':450.1,
 'C':12,
 'E':444,
}

max_prices = max(zip(prices.values(), prices.keys()))
print(max_prices) # (450.1, 'B')

Python3.x 中会碰到这样的问题:

>>> sites_link = {'3water':'3water.com', 'baidu':'baidu.com'}
>>> sides = sites_link.keys()
>>> print(sides[0])
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: 'dict_keys' object does not support indexing
>>>

原因说明及解决方法:

dict.values()
dict.keys()
在 python2.x dict.keys 返回一个列表,但是在在 Python 3.x 下,dict.keys 返回的是 dict_keys 对象,若需要转换为列表,请使用:

list(dict.values())
list(dict.keys())

修改上面实例:

>>> sites_link = {'3water':'3water.com', 'baidu':'baidu.com'}
>>> sides = sites_link.keys()
>>> list(sides)
['3water, 'baidu']
>>>

通过 values 取到 key 的方法:

>>> dic={"a":1,"b":2,"c":3}
>>> list(dic.keys())[list(dic.values()).index(1)]
'a'

字典列表,即在列表中嵌套字典:

dict_0 = {'color': 'green', 'points': 5} 
dict_1 = {'color': 'yellow', 'points': 10} 
dict_2 = {'color': 'red', 'points': 15}
lists = [dict_0, dict_1, dict_2]
for dict in lists: 
 print(dict)

输出:

{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15}

字典推导式:

格式:

{key:value for variable in iterable [if expression]}

执行步骤:

1、for 循环:遍历可迭代对象,将其值赋给变量。
2、if 语句:筛选满足 if 条件的结果。
3、存储结构:以键值对的方式存储在字典中。

Python 相关文章推荐
Python通过websocket与js客户端通信示例分析
Jun 25 Python
Python内置函数的用法实例教程
Sep 08 Python
跟老齐学Python之使用Python操作数据库(1)
Nov 25 Python
Python的迭代器和生成器使用实例
Jan 14 Python
使用Python实现博客上进行自动翻页
Aug 23 Python
Python pymongo模块用法示例
Mar 31 Python
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
Jun 27 Python
python中 * 的用法详解
Jul 10 Python
如何实现Django Rest framework版本控制
Jul 25 Python
解决python中导入win32com.client出错的问题
Jul 26 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
Aug 27 Python
python列表返回重复数据的下标
Feb 10 #Python
Python中断多重循环的几种方式详解
Feb 10 #Python
django有外键关系的两张表如何相互查找
Feb 10 #Python
Django重设Admin密码过程解析
Feb 10 #Python
tensorflow实现训练变量checkpoint的保存与读取
Feb 10 #Python
Python单元测试模块doctest的具体使用
Feb 10 #Python
简单了解django文件下载方式
Feb 10 #Python
You might like
php中判断一个字符串包含另一个字符串的方法
2007/03/19 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
php递归删除目录与文件的方法
2015/01/30 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
html超链接打开窗口大小的方法
2013/03/05 Javascript
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
js charAt的使用示例
2014/02/18 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
bootstrap选项卡扩展功能详解
2017/06/14 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
python搭建虚拟环境的步骤详解
2016/09/27 Python
使用python遍历指定城市的一周气温
2017/03/31 Python
通过Python实现自动填写调查问卷
2017/09/06 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
Python 使用type来定义类的实现
2019/11/19 Python
Python基于locals返回作用域字典
2020/10/17 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
欧舒丹美国官网:L’Occitane美国
2018/02/23 全球购物
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
女方回门宴答谢词
2014/01/14 职场文书
优秀教师的感人事迹
2014/02/04 职场文书
大学活动总结格式
2014/04/29 职场文书
2015年中学元旦晚会活动方案
2014/12/09 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
Python实现打乒乓小游戏
2021/09/25 Python