我的Python入门笔记(9)

六章、字典


Special cases aren't special enough to break the rules.——The Zen of Python


  字典和列表类似,也是可变序列,不过与列表不同的是,它是无序的可变列表,宝尊的内容是以“键值对”的形式存在的。Python中的字典相当于Java或者C++中的Map对象.

一、字典的主要特性:

  1.字典通过键而不是通过索引来读取的

  2.字典有时候也称为关联数组或者散列表(hash)。它是听过键讲一系列的值联系起来,这样就可以通过键从字典中获取指定项,但是不能通过索引来获取。

  3.字典是任意对象的无序集合

  4.字典是无序的,各项是从左到右随机排序的,即保存在字典中的想没有特定的顺序,这样可以提高效率,

  5.字典是可变的,并且可以任意嵌套

  6.字典可以在原处增长或缩短,无需生成一份备份,并且它支持任意深度的嵌套(即它的值可以是列表或者其他字典)

  7.字典中的键必须唯一不允许同一个键出现两次,如果出现两次,则后一个值会被记住。

  8.字典中的键必须不可变,,所以可以使用数字、字符串或者元组,但不能使用列表.

二、字典的创建和删除、

  定义字典时,每个元素都包含两个部分“键”和“值”,在创建字典时,在“键”和“值”之间使用冒号进行分割,相邻元素使用逗号进行分割。语法格式如下:

  Dictionary={‘key’:’value’,’key2’:’value’,…,’keyn’:’valuen’}

  Dictionary:字典的名称

  Key1:表示元素的键,必须是唯一的,并且不可变,可以是字符串、数字、元组。

  Value1:表示元素的孩子,可以是任意数据类型,不是必须唯一.

1 dict1={'name':'雨霓同学','Age':'22','Id':'12101184'}
2 print(type(dict1),dict1)
3 输出:
4 <class 'dict'> {'name': '雨霓同学', 'Age': '22', 'Id': '12101184'}

  同列表和元祖以这样,在Python中也可以创建空字典,例如:

  dictionary={}或者:dictionary=dict()

  Python的dict()方法除了可以创建一个空字典外,还可以通过已有的数据快速创建字典,主要表现为以下两种形式:

  1. 通过映射函数创建字典

  dictionary=dict(zip(list1,list2))

  dicrionary:表示字典的名称

  Zip()函数:用于将多个列表或者元祖对应位置的元素合为元祖,并返回包含这些内容的zip对象,如果想得到元祖,可以使用tuple()函数将zip对象转换为元组。如果想得到列表,则可以使用list()函数将其转化为列表. 

1 list1=['Name','Age','ID']
2 list2=['雨霓同学','22','12101184']
3 dict1=dict(zip(list1,list2))
4 print(dict1)
5 输出:
6 {'Name': '雨霓同学', 'Age': '22', 'ID': '12101184'}

  2. 通过给定的“键值对”创建字典

  dictionary=dict(key1=value1,key2=value2,….)

  dictionary表示字典的名称

  Key1,key2:表示元素的键,必须是唯一的,并且不可变,可以是字符串,数字,或者元祖

  Value1,value2:表示元素的值,可以是任何数据类型,不是必须唯一

1 dict1=dict(name='雨霓同学',Age=22,ID=12101184)
2 print(dict1)
3 输出:
4 {'name': '雨霓同学', 'Age': 22, 'ID': 12101184}

  在Python中,还可以使用dict对象的fromkeys()方法创建值为空的字典,

  dictionary=dict.fromkeys(list1)

  dicrionary:字典名称

  list1:作为字典的键的列表

1 name_list=['雨霓同学','布谷鸟','1210']  #作为键的列表
2 dict1=dict.fromkeys(name_list)
3 print(dict1)
4 输出:
5 {'雨霓同学': None, '布谷鸟': None, '1210': None}

  另外,还可以通过已经存在的元组和列表创建字典。

1 name_tuple=('雨霓同学','布谷鸟','1210') #作为键的元组
2 sign=['哔哩哔哩','Azure','1184']  # 作为值的列表
3 dict1={name_tuple:sign}  #创建字典
4 print(dict1)
5 输出
6 {('雨霓同学', '布谷鸟', '1210'): ['哔哩哔哩', 'Azure', '1184']}

  字典中的键必须不可变,,所以可以使用数字、字符串或者元组,但不能使用列表,否则会报错。

  同列表和元组一样,不再需要的字典可以使用del命令删除整个字典,del dictiomary

    此外,如果只是想删除字典的全部元素,可以使用字典对象的clear()方法实现。执行clear()方法后,原字典变为空字典。dictionary.clear()

  此外,还可以使用字典对象中的pop()方法删除并返回指定“键”的元素,以及使用字典对象的popitem()删除并返回字典中的一个元素。

三、字典的访问与遍历

  1.通过“键值对”访问字典

  在Python中,可以直接使用print()函数直接输出字典内容。也可以根据指定的键得到相应的结果,访问字典的元素可以通过下标的方式实现,与列表和元组不同,这里的下标不是索引号,而是键。

1 dict1=dict(name='雨霓同学',Age=22,ID=12101184)
2 print(dict1['name'])
3 输出:
4 雨霓同学

  但是在使用这种方法获取指定键的值时,如果指定的键不存在,则会抛出异常.在实际开发中,很可能我们不知道当前存在什么键,所以需要避免该异常的产生,在此,可以使用if语句对不存的情况进行处理,给一个默认值,示例如下:

1 dict1=dict(name='雨霓同学',Age=22,ID=12101184)
2 print('这个人的名字:',dict1['name'] if '' in dict1 else '你在访问什么')
3 输出:
4 这个人的名字: 你在访问什么

  此外,Python中推荐的方法是使用字典对象的get()方法获得指定键的值,语法格式如下:

  dictionary.get(key,[dafault])

  dictionary:字典对象,即要从中获取值的字典;

  key:指定的键

  default:可选项,用于指定键不存在时,返回一个默认值,如果省略,则返回None 

dict1=dict(name='雨霓同学',Age=22,ID=12101184)
print('这个人的名字:',dict1.get('name'))
print('这个人的名字:',dict1.get('Name','你在干什么'))
输出:
这个人的名字: 雨霓同学
这个人的名字: 你在干什么

  2.字典的遍历

  字典是以“键值对”的形式存储数据的,所以在使用字典时需要获取到这些“键值对”。Python提供了遍历字典的方法,通过遍历可以获得字典中的全部“键值对”,使用字典对象的items()方法可以获得字典的“键值对”列表。语法格式如下:

  dictionary.items()

  dictionary:字典对象,返回值为可遍历的“键值对”元组列表。想要获取到具体的“键值对”可以通过for循环遍历改元组列表。示例如下:

1 dict1=dict(name='雨霓同学',Age=22,ID=12101184)
2 for item in dict1.items():
3     print(item)
4 输出:
5 ('name', '雨霓同学')
6 ('Age', 22)
7 ('ID', 12101184)

  如果需要获取到具体的每个键和值,可以使用如下方法:

1 dict1={'雨霓同学':2769433,'Age':220284,'ID':12101184}
2 for key,value in dict1.items():
3     print(key,'的编号为',value)
4 输出:
5 雨霓同学 的编号为 2769433
6 Age 的编号为 220284
7 ID 的编号为 12101184

  在Python中,字典对象还提供了value()key()方法,用于返回字典的值和键列表,使用方法同items()方法,也需要通过for循环遍历该字典列表,获取相应的值和键。

四、添加、修改和删除字典元素

  由于字典是可变序列,所以可以随时在其中添加“键值对”,这和列表类似。其语法格式如下:

  dictionary[key]=value

  dictionary:表示字典的名称

  key:表示要添加的元素,必须是唯一的,并且不可变,可以是字符串、数字或者元组

  value:表示元素的值,可以是任何数据类型,不是必须唯一。

1 dict1={'雨霓同学':2769433,'Age':220284,'ID':12101184}
2 dict1["哔哩哔哩"]='2233'
3 print(dict1)
4 输出:
5 {'雨霓同学': 2769433, 'Age': 220284, 'ID': 12101184, '哔哩哔哩': '2233'}

  在字典中,“键”必须是唯一的,所以新添加元素的“键”与已经存在的“键”重复,那么将使用新的“值”替换原来该“键”的值,这也相当于修改字典的元素.

  当字典的某一个元素不需要时,可以使用del命名将其删除,示例如下:

1 dict1={'雨霓同学':2769433,'Age':220284,'ID':12101184}
2 del dict1["雨霓同学"]
3 print(dict1)
4 输出:
5 {'Age': 220284, 'ID': 12101184}

  当删除一个不存在的键时,则会抛出异常.

五、字典推导式

  使用字典推导式可以快速生成一个字典,它的表现形式和列表推导式相似,示例如下:

1 import random
2 randomdict= {i :random.randint(10,100) for i in range(1,5)}
3 print(randomdict)
4 输出:
5 {1: 77, 2: 41, 3: 82, 4: 85}
原文地址:https://www.cnblogs.com/1210x1184/p/11107724.html