Python3 字典dictionary入门基础附实例
作者:mdxy-dxy 发布时间:2023-03-08 18:57:49
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': 'jb51.net', 'Age':13, 'Class': 'Second'}
print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])
以上实例输出结果:
dict['Name']: jb51.net
dict['Age']: 13
如果用字典里没有的键访问数据,会输出错误如下:
#!/usr/bin/python3
dict = {'Name': 'jb51.net', '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': 'jb51.net', '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': 'jb51.net', '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': 'jb51.net', 'Age': 13, 'Name': '脚本之家'}
print ("dict['Name']: ", dict['Name'])
以上实例输出结果:
dict['Name']: 脚本之家
2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行,如下实例:
#!/usr/bin/python3
dict = {['Name']: 'jb51.net', 'Age': 7}
print ("dict['Name']: ", dict['Name'])
以上实例输出结果:
Traceback (most recent call last):
File "F:\python\test.py", line 2, in <module>
dict = {['Name']: 'jb51.net', 'Age': 7}
TypeError: unhashable type: 'list'
字典内置函数&方法
Python字典包含了以下内置函数:
序号 | 函数及描述 | 实例 |
---|---|---|
1 | len(dict) 计算字典元素个数,即键的总数。 | >>> dict = {'Name': 'jb51.net', 'Age': 13, 'Class': 'First'}>>> len(dict)3 |
2 | str(dict) 输出字典,以可打印的字符串表示。 | >>> dict = {'Name': 'jb51.net', 'Age': 13, 'Class': 'First'}>>> str(dict)"{'Name': 'jb51.net', 'Class': 'First', 'Age': 13}" |
3 | type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。 | >>> dict = {'Name': 'jb51.net', 'Age': 13, 'Class': 'First'}>>> type(dict)<class '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':'jb51.net','b':'baidu'}
for i in b.values():
print(i)
for c in b.keys():
print(c)
执行输出结果为:
jb51.net
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 = {'jb51':'jb51.net', '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 = {'jb51':'jb51.net', 'baidu':'baidu.com'}
>>> sides = sites_link.keys()
>>> list(sides)
['jb51, '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、存储结构:以键值对的方式存储在字典中。
来源:https://www.runoob.com/python3/python3-dictionary.html


猜你喜欢
- 特么的,上次写了一堆,发现,原来下载网易云的歌曲根本不用这么费劲,直接用!http://music.163.com/song/media/o
- plt.subplot()plt.subplot(nrows, ncols, index, **kwargs)第一个参数:*args (官网
- 目录1、SKlearn 是什么2、SKlearn 的安装3、SKlearn 内置数据集测试问题数据集实际问题数据集4、Sklearn 数模笔
- 平时学生交上机作业的时候经常有人相互复制,直接改文件名了事,为了能够简单的检测这种作弊行为,想到了检测文件的MD5值,虽然对于抄袭来说作用不
- 什么是锁锁的本质,就是一种资源,是由操作系统维护的一种专门用于同步的资源比如说互斥锁,说白了就是一种互斥的资源。只能有一个进程(线程)占有。
- 1. 简介(Introduction)官方原文本文翻译了原文并加入了自己的理解。主要介绍多个 Go协程之间对同一个变量并发读写时需要注意的同
- 这两天一直在看tensorflow中的读取数据的队列,说实话,真的是很难懂。也可能我之前没这方面的经验吧,最早我都使用的theano,什么都
- 比较简单的一个页面,类似csdn论坛在ns下的左边列表 描述: 1. 数据名:tree.mdb 表名:tree 表结构:id(自编)&nbs
- 不久之前,笔者一个在企业中从事网管工作的朋友向我求助关于SQL Server服务器内存升级后遇到的问题。原来,他们企业准备上一个企业邮箱系统
- 很多人不明白,学习这些冷门的函数基本上都用不到,或者说是什么多大用处,事实上,有是有很多用处的,比如今天给大家介绍的uuid模块,就能够生成
- 四、XML应用分类 总的说来的XML的应用可分为四类: (1)应用于客户需要与不同的数据源进行交互时。数据可能来自不同的数据库,他们都有各自
- 在开始做mysql分页功能组件前,便设定的是要有一定可复用性。先在项目里Views文件夹下右键新建名为_PaginationComponen
- 如下所示://动态删除select中的所有options: function delAllOptions(){&nb
- 效果图:作用:将页面中的电话号码生成图片格式。<%Public Sub Com_CreatValidCode(pT
- 昨天在W3C看到,6月10日发布了新的 HTML 5 草案(Working Draft)。粗略的读了一下它提供的 新版本说明文档 ,作了一点
- Fuse.js是什么最近在项目里用到了Fuse.js做模糊查询,便对这个算法起了点好奇心,翻了翻源码。Fuse.js 是一个 JavaScr
- Gravatar注册地址: https://en.gravatar.com/"""`Gravatar <
- AES(英文:Advanced Encryption Standard,中文:高级加密标准),是一种区块加密标准。AES将原始数
- 前言最近发现一个问题,在一次爬虫实战中,需要将字典加入列表中,意外的情况出现了!!!下面简单分析一下出现的状况:list = []dic =
- 如:$str="php如何将字 符串中322的字母数字sf f45d和中文_分割?";按数字或字母分割。$str = &