Python学习笔记(七)字典
作者:互联网
八、字典
字典是Python唯一的映射类型,以键值对(key - value)的方式进行存储
1、创建字典
字典可以使用多种形式进行创建,在访问时也是像列表一样通过中括号进行索引,不过不是通过下标而是通过键来进行访问。
下面对一部分字典创建方法进行列举
(1) 通过花括号创建
字典可以通过花括号创建,每个键值对的形式为<键 : 值>
dict1 = {'Harry':'ExpelliArmus', 'Ron':'Bloody hell', 'Naruto':'Rasengan', 'August':'???'}
print('Ron said:', dict1['Ron'])
输出结果:Ron said: Bloody hell
(2) 使用关键词参数和类型构造函数
dict2 = dict(name = 'August', gender = 'male') #每个“值”前面的“键”为关键字参数,不是字符串
print(dict2)
输出结果:{'name': 'August', 'gender': 'male'}
(3) 使用类型构造函数和zip()方法
keys = ['1', '2', '3', '4']
values = ['one', 'two', 'three', 'four']
dict3 = dict(zip(keys, values))
print(dict3)
输出结果:{'1': 'one', '2': 'two', '3': 'three', '4': 'four'}
(4) 按字段分开填写
dict4 = {} #创建空字典
dict4['name'] = 'FWTY'
dict4['nickName'] = 'August'
dict4['age'] = '23'
print(dict4)
输出结果:{'name': 'FWTY', 'nickName': 'August', 'age': '23'}
(5) fromkeys()
fromkeys()方法的作用也是建立新的字典
fromkeys()方法并不是对字典本身进行操作而是创建一个新字典,所以需要将创造出的字典赋值给一个变量
fromkeys(<keys> [,<values>]) #velues不提供的话默认为None
dict5 = dict.fromkeys((1, 2, 3)) #参数values为空
print(dict5)
输出结果:{1: None, 2: None, 3: None}
========================================================
dict5 = dict.fromkeys((1, 2, 3), 'Numbers')
print(dict5)
输出结果:{1: 'Numbers', 2: 'Numbers', 3: 'Numbers'}
注意,第二个参数会被fromkeys()方法当做一个整体处理
dict5 = dict.fromkeys((1, 2, 3), ('one', 'two', 'three'))
print(dict15
输出结果:{1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}
'''由于是当作一个整体处理,所以并不会将元组中的每一个元素作为不同的值分别对应到每一个键,而是将元组整体作为一个值'''
2、访问字典
(1) keys()
keys()方法的作用是返回字典的键
dict1 = dict.fromkeys(('A', 'B', 'C', 'D'), 'Letters')
for eachKey in dict1.keys():
print(eachKey)
输出结果: A
B
C
D
(2) values()
values()方法的作用是返回字典的值
keys = ['1', '2', '3', '4']
values = ['one', 'two', 'three', 'four']
dict2 = dict(zip(keys, values))
for eachValue in dict2.values():
print(eachValue)
输出结果:one
two
three
four
(3) items()
items()方法的作用是返回字典的项(键值对)
keys = ['1', '2', '3', '4']
values = ['one', 'two', 'three', 'four']
dict2 = dict(zip(keys, values))
for eachItem in dict2.items():
print(eachItem)
输出结果:('1', 'one')
('2', 'two')
('3', 'three')
('4', 'four')
(4) get()
get()方法是一个更为宽松的访问字典项的方法。当我们直接使用键来索引时,如果访问的是一个不存在的键,那么程序将会报错,如:
dict3 = dict.fromkeys((1, 2, 3), 'Numbers')
print(dict3[4])
输出结果:KeyError: 4
但当我们使用get()方法时,访问不存在的键并不会报错。
get(<键>[, <当键不存在时的返回值>]) #第二个参数可选,不填时默认返回None
dict3 = dict.fromkeys((1, 2, 3), 'Numbers')
print(dict3.get(4))
输出结果:None
================================================
print(dict3.get(4, 'Dont Exist'))
输出结果:Dont Exist
3、常用方法
(1) clear()
clear()方法的作用是清空字典
dict1.clear()
print(dict1)
输出结果:{}
(2) copy()
copy()方法是浅拷贝
浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改动原对象。
如果拷贝的对象里的元素只有值,没有引用,那浅拷贝和深拷贝没有差别,都会将原有对象复制一份,产生一个新对象,对新对象里的值进行修改不会影响原有对象,新对象和原对象完全分离开。
如果拷贝的对象里的元素包含引用(像一个列表里储存着另一个列表,存的就是另一个列表的引用),那浅拷贝和深拷贝是不同的,浅拷贝虽然将原有对象复制一份,但是依然保存的是引用,所以对新对象里的引用里的值进行修改,依然会改变原对象里的列表的值,新对象和原对象完全分离开并没有完全分离开。而深拷贝则不同,它会将原对象里的引用也新创建一个,即新建一个列表,然后放的是新列表的引用,这样就可以将新对象和原对象完全分离开。
而直接赋值,则是相当于对象的引用
简单举例:
a = {1 : '123'}
b=a
直接赋值 a, b指向同一个对象
b = a.copy()
浅拷贝 a, b是独立的两个对象,但他们的子对象还指向同一对象(是同一对象的引用)
b = copy.deepcopy(a)
深拷贝 b完全拷贝了a的父对象及其子对象,两者完全独立
(3) pop() / popitem()
pop()方法的作用是弹出一个字典项并返回这一项的值
dict2 = {1:'one', 2:'two', 3:'three', 4:'four'}
print(dict2.pop(2))
print(dict2)
输出结果:two #返回键为2的字典项的值
{1: 'one', 3: 'three', 4: 'four'}
popitem()方法的作用为弹出最后一个字典项并返回
dict2 = {1:'one', 2:'two', 3:'three', 4:'four'}
print(dict2.popitem())
print(dict2)
输出结果:(4, 'four')
{1: 'one', 2: 'two', 3: 'three'}
(4) setdefault()
setdefault()方法的作用是根据键查找对应值,若查询的键不存在则将其添加进字典中
setdefault(<键>[, <值>]) #若不规定值则在添加时,加入的键对应值为None
dict2 = {1:'one', 2:'two', 3:'three', 4:'four'}
print(dict2.setdefault(1))
print(dict2.setdefault(5))
print(dict2.setdefault(6, 'six'))
print(dict2)
输出结果:one #查询的键值对存在
None #未设置值对应参数
six #设置了值对应参数
{1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: None, 6: 'six'}
(5) update
update()方法的作用是利用一个字典(或映射关系)去更新字典
dict2 = {1:'one', 2:'two', 3:'three', 4:'four'}
dict3 = {4:'肆'}
dict2.update(dict3)
print(dict2)
输出结果:{1: 'one', 2: 'two', 3: 'three', 4: '肆'}
标签:dict2,Python,two,笔记,three,对象,print,字典 来源: https://www.cnblogs.com/augustcode/p/python_7.html