创建和使用字典
字典可以用下面方式创建:
phoneBook = {"Bill":"1234", "Mike":"4321"}
字典中,键是唯一的。如果键不唯一,那么程序也不会抛出异常,只是相同的键值会被最后一个覆盖:
phoneBook = {"Bill":"1234", "Mike":"4321", "Bill":"5678"}
# 如果通过 Bill 定位,那么查到的值是 "5678"
dict函数
可以用
dick
函数,通过其他映射或键值对的序列建立字典。
items = [["Bill","1234"], ("Mike","4321")]
d1 = dict(items)
d2 = dict(name = 'Bill', number = '5678', age = 45)
print(d1) # {'Bill': '1234', 'Mike': '4321'}
print(d2) # {'name': 'Bill', 'number': '5678', 'age': 45}
字典的基本操作
- 字典的很多操作与列表类似:
len(dict)
:返回字典dict中元素的数量dict[key]
:返回关联到key上的值dict[key] = value
:为key赋值del dict[key]
:删除键为key的项key in dict
:检查dict中是否包含有键为key的项
字典的格式化字符串(format_map()方法)
dic = {'title':'MyTitle', 'url':'http://www.aaa.com', 'company':'Zerobit'}
str = """
<html>
<head>
<title>{title}</title>
<head>
<body>
<h1>{title}</h1>
<a href="{url}">{company}</a>
</body>
</html>
"""
print(str.format_map(dic))
字典的迭代
1. 获取字典中key的列表
dic = {'x':1, 'y':2, 'z':3}
# 输出 x y z
for key in dic:
print(key, end=' ')
2. 同时获取字典中的key和value列表
dic = {'x':1, 'y':2, 'z':3}
for key,value in dic.items():
print(key, value)
字典方法
clear方法
- clear方法用于清空字典中的所有元素
dic = {'x':1, 'y':2, 'z':3}
dic.clear()
copy方法与deepcopy函数
- copy方法用于复制一个字典,该方法返回复制后的新字典
dic = {'x':1, 'y':2, 'z':3}
newDic = dic.copy()
copy方法只是浅复制,只复制 第1层 的字典数据。至于第2层及以下的所有层,原字典和新字典都指向同一个值,不管是修改原字典的这些元素,还是新字典中的这些元素,原字典和新字典中的这些元素都会同时改变。
- 如果想改上面的情况,就需要使用
copy
模块中的deepcopy
函数进行深层复制
from copy import deepcopy
dic = {'x':1, 'y':2, 'z':3}
newDic = deepcopy(dic)
fromkeys方法
- fromkeys方法用于根据key建立新的字典。在新的字典中,所有的key都有相同的默认值。
# 在一个空字典上调用fromkeys方法创建一个新字典,通过列表指定key
newDic1 = {}.fromkeys(['name', 'company', 'salary'])
print(newDic1) # {'name': None, 'company': None, 'salary': None}
newDic2 = {}.fromkeys(['name', 'company', 'salary'], 100)
print(newDic2) # {'name': 100, 'company': 100, 'salary': 100}
get方法
使用dict[key]的形式从字典获取value时,如果key不存在,则会抛KeyError异常
- 如果想避免key不存在抛异常的情况,则需使用
get()
方法
dic = {'x':1, 'y':2, 'z':3}
print(dic.get('a')) # None
items方法和keys方法
- items方法用于返回字典中所有的 key-value 对,可用于迭代。
- keys方法用于返回字典中所有的 key,也可用于迭代。
pop方法和popitem方法
- pop方法用于获取指定key的值,并从字典中弹出这个 key-value 对。
- popitem方法用于返回并弹出字典中最后一个 key-value 对。
对于字典来说,里面的元素并没有顺序,所以这里所说的最后一个 key-value 对,是指最后一个添加的 key-value 对。
dic = {'c':10, 'a':40, 'b':12, 'x':44}
dic['z'] = 3
print(dic.pop('b')) # 12
print(dic.popitem()) # ('z', 3)
print(dic) # {'c': 10, 'a': 40, 'x': 44}
setdefault方法
- setdefault方法用于设置key的默认值。该方法接收两个参数,第1个表示
key
,第2个参数表示默认值。如果key不存在,则会向字典中添加这个key和默认值
dic = {}
dic.setdefault("name","alex")
print(dic) # {'name': 'alex'}
update方法
- update方法可以用一个字典中的元素更新另外一个字典。
dic1 = {'c':10, 'a':40, 'b':12, 'x':44}
dic2 = {'name': 'Bill', 'number': '5678', 'x': 150}
dic1.update(dic2)
print(dic1) # {'c': 10, 'a': 40, 'b': 12, 'x': 150, 'name': 'Bill', 'number': '5678'}
如果dict2中的 key-value 对在dict1中不存在,那么会在dict1中添加一个新的 key-value 对。如果dict1已经存在这个key,那么会用dict2中key对应的值更新dict1中key的值。
values方法
- values方法用于以迭代器形式返回字典中值的列表
dic = {'c':10, 'a':40, 'b':12, 'x':44}
for val in dic.values():
print(val, end=' ') # 10 40 12 44