字典
Python中的字典属于散列类型,其数据内容是以键值对的形式存在。即{key:value,key:value,key:value}的形式,其中,key值是不可变类型,value是可变类型。key值不能相同,但是value可以相同,若key值相同,则无法存入字典,可以通过key值修改字典value,直接通过键值添加。
新建
方法一:{}
# 新建空字典
a = {}
# 新建字典并赋值
a = {1:222}
print(a,type(a))
>>>{1: 222} <class 'dict'>
方法二:dict()
# 新建空字典
a = dict()
# 新建字典并赋值
a = dict(a=1, b=2)
print(a, type(a))
>>>{'a': 1, 'b': 2} <class 'dict'>
增
方法一:dict[key] = value
# 使用下标索引并赋值
a = dict()
a['a'] = 1
print(a, type(a))
>>>{'a': 1} <class 'dict'>
方法二:setdefault(key, value)
#key值已存在则查询并返回value值,无则增加,若value省略,则默认value值为None。
a = {1:2}
print(a.setdefault(1,3))
print(a)
print(a.setdefault(2))
print(a)
print(a.setdefault(3,4))
print(a)
>>>2
>>>{1: 2}
>>>None
>>>{1: 2, 2: None}
>>>4
>>>{1: 2, 2: None, 3: 4}
删
方法一:pop()
# pop() 删除某一个键值对 pop(key),并返回该键对应的值
a = {'a': 111, 'b': 222}
print(a.pop('a'))
print(a)
>>>111
>>>{'b': 222}
方法二:popitem()
# popitem() 不带参数,随机删除一个键值对,并返回该键值对
a = {'a': 111, 'b': 222, 'c': 333, 'd': 444}
print(a.popitem(), type(a.popitem()))
print(a)
>>>('d', 444) <class 'tuple'>
>>>{'a': 111, 'b': 222}
方法三:clear()
# clear() 清空字典
a = {'a': 111, 'b': 222, 'c': 333, 'd': 444}
a.clear()
print(a)
>>>{}
改
方法一:dict[key] = value
# 直接使用索引赋值修改
a = {'a': 1}
a['a'] = 2222
print(a)
>>>{'a': 2222}
方法二:update({key,value})
# update({key,value}) 更新key的value值
a = {'a': 2}
a.update({'a':2222})
print(a)
>>>{'a': 2222}
查
方法一:下标索引
# 下标索引的key值存在则返回,无则报错,建议使用get()方法
a = {'a': 111, 'b': 222, 'c':333, 'd': 444}
print(a['b'])
print(a['e'])
>>>222
>>>KeyError: 'e'
方法二:get(key)
#get(key),若不存在返回None,对于不确定是否存在的key,建议使用get()方法查询
a = {'a': 111, 'b': 222, 'c':333, 'd': 444}
print(a.get('a'))
print(a.get('e'))
>>>111
>>>None
遍历
遍历key值
方法一:字典迭代
# 字典是可迭代对象,迭代的元素为key
a = {'a': '1', 'b': '2', 'c': '3'}
print([key for key in a])
>>>['a', 'b', 'c']
方法二:keys()
# keys() 取出所有的key值,返回dict_keys对象,也是可迭代对象
a = {'a': '1', 'b': '2', 'c': '3'}
print(a.keys(),type(a.keys()))
>>>dict_keys(['a', 'b', 'c']) <class 'dict_keys'>
遍历value值
方法一:values()
# keys() 取出所有的key值,返回dict_keys对象,也是可迭代对象
a = {'a': '1', 'b': '2', 'c': '3'}
print(a.values())
dict_values(['1', '2', '3']) <class 'dict_values'>
遍历健值对
方法一:key索引
a = {'a': 1, 'b': 2, 'c': 3}
for key in a:
print(key+':'+a[key])
>>>a:1
>>>b:2
>>>c:3
方法二:items()
# items() 返回的是(key,value)的元组
a = {'a': 1, 'b': 2, 'c': 3}
for key, value in a.items():
print(key+':'+value)
>>>a:1
>>>b:2
>>>c:3
类型转换
元组转字典
a = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
print(dict(a))
>>>{'a': 1, 'b': 2, 'c': 3, 'd': 4}
列表转字典
方法一:二维数组转字典,dict()
a = [['a', 1], ['b', 2], ['c', 3]]
print(dict(a))
>>>{'a': 1, 'b': 2, 'c': 3}
方法二:两个列表转字典,zip()
# 利用zip()函数先把两个列表转为元组,再由元组转为字典
list1 = ["a", "b", "c", "d"]
list2 = [1, 2, 3, 4]
print(dict(zip(list1, list2)))
>>>{'a': 1, 'b': 2, 'c': 3, 'd': 4}
高级用法
查询字典中最大、小的value值对应的key值
# 比较的字典的value值,返回的是key
a = {'a': 3, 'b': 2, 'c': 1}
print(min(a, key=a.get))
>>>c
【说明】max/min函数对可迭代对象进行遍历比较操作,字典的遍历是对key值的遍历,min()中的key参数是字典的get()函数,且把遍历的key值传入get()函数中
# 比较的是字典的key值,返回的是key
print(min(a))
>>>a
使用字典拼接字符串
# 字符串模板中使用key
book = {'name': 'old man and sea', 'price': 99.99, 'publish': 'Huawei'}
temp = '书名:%(name)s, 价格:%(price)010.2f, 出版社:%(publish)s'
print(temp % book)
>>>书名:old man and sea, 价格:0000099.99, 出版社:Huawei