文章目录
字典是python中唯一内建的映射类型(mapping)
1.字典的创建
phonebook1={'Mike':1234,'John':9876}
phonebook2={} #直接定义一个空字典
dict函数
通过其他映射或键值对的序列来创建字典。
# ①通过dict函数将列表元素转换成字典(列表的每一个元素均包含两个值,是一个列表或是一个元组)
item=[["Bill","1234"],("Mike","5678")]
d=dict(item)
print(d)
> 运行结果: {'Bill': '1234', 'Mike': '5678'}
# ②dict函数通过关键字参数来创建字典
item1=dict(name="Bill",number='100',age=45)
print(item1)
> 运行结果: {'name': 'Bill', 'number': '100', 'age': 45}
# ③dict函数如果不指定任何参数,则返回一个空的字典
item2=dict()
print(item2)
> 运行结果: {}
2.字典的基本操作
len(dict) :返回字典dict中元素(键值对)的数量。
dict[key]=value:将值value关联到键key上。
del dict[key]:删除键为key的项。
key in dict:检查dict中是否包含有键为key的项。
键类型:字典的键可以是任意不可变类型。
dict={} #定义一个字典
#分别向字典dict中添加整数类型、字符串类型、元组类型的key
dict[20]="Bill"
dict["Mike"]={'age':30,'num':3000}
dict[(12,"Mike",True)]="hello"
print(dict)
#运行结果:{20: 'Bill', 'Mike': {'age': 30, 'num': 3000}, (12, 'Mike', True): 'hello'}
3.字典的格式化字符串
之前我们使用百分号(%)配合元组对字符串进行格式化,如下:
val1=(1,3,"hello")
str1="abc %d,xyz %d,%s world"
print(str1%val1)
#运行结果:abc 1,xyz 3,hello world
现在我们可以使用字典配合format_map方法对字符串进行格式化,如下:
val2={'H':'how','U':'you','W':'?'}
str2="{H} are {U}{W} {H} do {U} do{W}" #定义一个字符串模板,需要格式化的参数使用花括号{}括起来
print(str2.format_map(val2))
#运行结果:how are you? how do you do?
4.迭代遍历字典中的key和value
dict={'x':1,'y':2,'z':3}
for i in dict:
print(i,dict[i],end=' ') #Output:x 1 y 2 z 3
for i,j in dict.items():
print(i,j,end=' ') #Output:x 1 y 2 z 3
5.字典方法
①clear方法
用于清空字典中的所有元素。
dict={'x':1,'y':2}
dict.clear()
print(dict) #Output:{}
num1={'x':1,'y':2}
num2=num1 #此时num1 is num2
num1={} #num1重新指向一个空字典后,此时num1 is not num2,所以num1的改变对num2无影响
print(num1,num2) #Output:{} {'x': 1, 'y': 2}
num1={'x':1,'y':2}
num2=num1 #此时num1 is num2
num1.clear() #故num1清空了num2也随之清空了
print(num1,num2) #Output:{} {}
②get方法
用于更宽松的方式从字典中获取key对用的value。
当我们使用dict[key]从字典中获取对应的value时,如果key不存在则程序会抛出异常,而用get方法可以阻止在key不存在时抛出异常。
get方法的第2个参数指定当key不存在时的返回值,默认情况下无指定第2个参数时返回None。
dict={'a':1,'b':2}
print(dict.get('c',0))
#Output:0
③items方法和keys方法、values方法
items方法用于返回字典中所有的key-value对,每一对以一个元组表示。
dict={'a':1,'b':2,'c':3}
print(dict.items()) #Output: dict_items([('a', 1), ('b', 2), ('c', 3)])
print(('a',1) in dict.items()) #Output: True
for key_value in dict.items():
print(key_value,key_value[0],key_value[1])
#Output:
('a', 1) a 1
('b', 2) b 2
('c', 3) c 3
keys方法用于的返回字典中所有的key。
values方法用于返回字典中所有的value。
dict={'a':1,'b':2,'c':3}
print(dict.keys()) #Output:dict_keys(['a', 'b', 'c'])
print(dict.values()) #Output:dict_values([1, 2, 3])
for key in dict.keys():
print(key,end=" ")
#Output:a b c
for value in dict.values():
print(value,end=" ")
#Output:1 2 3
④pop方法和popitem方法
pop方法用于获取指定key的值,并从字典中弹出这个key-value对。
popitem方法用于返回字典中最后一个添加的key-value对并弹出。
dict={'a':1,'b':2,'c':3}
dict[5]=4
dict['1']=5
print(dict) #Output: {'a': 1, 'b': 2, 'c': 3, 5: 4, '1': 5}
print(dict.pop('b')) #Output:2
#弹出字典中所有的元素
for i in range(len(dict)):
print(dict.popitem())
#Output:
('1', 5)
(5, 4)
('c', 3)
('a', 1)
print(dict) #Output:{}
⑤setdefault方法
setdefault方法用于设置key的默认值。
该方法有两个参数,第1个参数表示key,第2个参数表示key的默认值,若第2个参数未指定,则key的默认值为None。
若key在字典中不存在,则该方法会向字典中添加这个key;若key在字典中存在,则该方法返回key原有的值,而不会去修改。
该方法主要用于向字典中添加新的key-value对,以及获取原有key的值。
dict={}
print(dict.setdefault('a',2)) #Output: 2
print(dict) #Output: {'a': 2}
print(dict.setdefault('a',3)) #并没有改变a对应的值,Output: 2
print(dict.setdefault('b')) #Output: None
print(dict) #Output: {'a': 2, 'b': None}
⑥update方法
update方法可以用一个字典中的元素更新另外一个字典。
dict1={'a':1,'b':2,'c':3}
dict2={'a':6,'b':2,'d':7}
dict1.update(dict2) #用dict2中的元素更新dict1
print(dict1)
#Output: {'a': 6, 'b': 2, 'c': 3, 'd': 7}
⑦fromkeys方法
fromkeys方法用于根据key建立新的字典(该方法的返回值就是新的字典)
默认情况下fromkeys方法为每个key指定None为其默认值,我们可以使用第2个参数设置新的默认值。
newdict={}.fromkeys(['a','b','c']) #可通过列表指定key
print(newdict) #Output: {'a': None, 'b': None, 'c': None}
newdict2=newdict.fromkeys(('name','age')) #也可通过元组指定key
print(newdict2) #Output: {'name': None, 'age': None}
newdict3=newdict2.fromkeys(('q','w','e'),0) #第2个参数为每个key指定默认值为0
print(newdict3) #Output: {'q': 0, 'w': 0, 'e': 0}
⑧copy方法和deepcopy函数
copy方法:
用于复制一个字典,返回复制后的字典。
copy方法复制的字典只是浅复制,也就是说只复制第1层的字典数据。至于第2层及以下的所有层,原字典和新字典都指向同一个值。即不管是对原字典还是新字典进行修改,原字典和新字典中对应的元素都会同时改变。
dict={'a':1,'b':2,'c':[1,2,3]}
newdict=dict.copy()
print(newdict) #Output: {'a': 1, 'b': 2, 'c': [1, 2, 3]}
newdict['a']=3
print(dict) #Output: {'a': 1, 'b': 2, 'c': [1, 2, 3]}
newdict['c'][0]=5
print(dict) #Output: {'a': 1, 'b': 2, 'c': [5, 2, 3]}
deepcopy函数:
copy模块的deepcopy函数可对序列进行深层复制,复制后的原字典和新字典是完全脱离的,任何一个进行修改都不会影响另一个。
from copy import deepcopy
dict={'a':1,'b':2,'c':[1,2,3]}
newdict=deepcopy(dict)
print(newdict) #Output: {'a': 1, 'b': 2, 'c': [1, 2, 3]}
newdict['c'][0]=5
print(dict) #Output: {'a': 1, 'b': 2, 'c': [1, 2, 3]}