字典在其他语言里可能会被叫做 联合内存 或 联合数组。与以连续整数为索引的序列不同,字典是以 关键字 为索引的,关键字可以是任意不可变类型,通常是字符串或数字。如果一个元组只包含字符串、数字或元组,那么这个元组也可以用作关键字。但如果元组直接或间接地包含了可变对象,那么它就不能用作关键字。列表不能用作关键字,因为列表可以通过索引、切片或 append() 和 extend() 之类的方法来改变。
理解字典的最好方式,就是将它看做是一个 键: 值 对的集合,键必须是唯一的(在一个字典中)。一对花括号可以创建一个空字典:{} 。另一种初始化字典的方式是在一对花括号里放置一些以逗号分隔的键值对,而这也是字典输出的方式。
1.字典的定义
>>> type({})
<class 'dict'>
>>> user = {'name':'张三','age':18,'sex':'男'}
>>> user
{'name': '张三', 'age': 18, 'sex': '男'}
>>> user['name']
'张三'
#对一个字典执行 list(d) 将返回包含该字典中所有键的列表,按插入次序排列 (如需其他排序,则要使用 sorted(d))
>>> tel = list(user)
>>> tel
['name', 'age', 'sex']
#要检查字典中是否存在一个特定键,可使用 in 关键字。
>>> 'name' in tel
True
# dict() 构造函数可以直接从键值对序列里创建字典
>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'guido': 4127, 'jack': 4098}
# 字典推导式可以从任意的键值表达式中创建字典
>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}
#当关键字是简单字符串时,有时直接通过关键字参数来指定键值对更方便
>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'guido': 4127, 'jack': 4098}
2.访问字典的元素
访问字典的元素是通过字典的key
来访问字典某个值,key在字典中是唯一的
>>> user = {'name':'张三','age':18,'sex':'男'}
>>> user['name']
3.字典的操作
>>> user = {'name':'张三','age':18,'sex':'男'}
# 修改字典内容
>>> user['name'] = '隔壁老王'
>>> user
{'name': '隔壁老王', 'age': 18, 'sex': '男'}
# 删除字典元素
>>> del user['name']
>>> user
{'age': 18, 'sex': '男'}
# 添加字典元素
>>> user['height'] = '175cm'
{'age': 18, 'sex': '男', 'height': '175cm'}
4.获取字典的长度
>>> user = {'name':'张三','age':18,'sex':'男'}
>>> len(user)
3
5.字典常用操作函数
函数名 | 描述 | 示例 | 结果 |
---|
dict.clear() | 删除字典内所有元素 | {‘name’:’张三’,’age’:18}.clear() | {} |
dict.copy() | 返回一个字典的浅复制 | {‘name’:’张三’,’age’:18}.copy() | {‘name’:’张三’,’age’:18}.copy() |
dict.fromkeys(seq[,val]) | 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值 | | |
dict.get(key, default=None) | 返回指定键的值,如果值不在字典中返回default值 | {‘name’:’张三’,’age’:18}.get(‘age’) | 18 |
dict.items() | 以列表返回可遍历的(键, 值) 元组数组 | {‘name’:’张三’,’age’:18}.items() | dict_items([(‘name’, ‘张三’), (‘age’, 18)]) |
dict.keys() | 以列表返回一个字典所有的键 | {‘name’:’张三’,’age’:18}.keys() | dict_keys([‘name’, ‘age’]) |
dict.update(dict2) | 把字典dict2的键/值对更新到dict里 | {‘name’:’张三’,’age’:18}.update({‘sex’:’男’,’height’:’190cm’}) | {‘name’: ‘张三’, ‘age’: 18, ‘sex’: ‘男’, ‘height’: ‘190cm’} |
dict.values() | 以列表返回字典中的所有值 | {‘name’:’张三’,’age’:18}.values() | dict_values([‘张三’, 18]) |
dict.pop(key) | 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 | {‘name’:’张三’,’age’:18}.pop() | ‘张三’ |
dict.popitem() | 随机返回并删除字典中的一对键和值 | {‘name’: ‘张三’, ‘age’: 18, ‘sex’: ‘男’, ‘height’: ‘190cm’}.popitem() | (‘height’, ‘190cm’) |
dict.setdefault(key,default=None) | 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default | {‘name’:’张三’,’age’:18}.setdefault(‘cc’) | {‘name’:’张三’,’age’:18},’cc’:None} |
6.字典映射代替switch
在python中没有switch
语句,官方建议用if-elif
来代替switch语句。
def get_monday():
return 'Monday'
def get_tuesday():
return 'Tuesday'
def get_wednesday():
return 'Wednesday'
def get_thursday():
return 'Thursday'
def get_friday():
return 'Friday'
def get_saturday():
return 'Saturday'
def get_sunday():
return 'Sunday'
def get_default():
return '没有对应的星期'
switcher = {
0: get_sunday,
1: get_monday,
2: get_tuesday,
3: get_wednesday,
4: get_thursday,
5: get_friday,
6: get_saturday
}
day = 0
dayName = switcher.get(day, get_default)()
print(dayName)
7.字典遍历
遍历key
di = {"name":"张三","age":19,"sex":"男"}
for key in di:
print(key)
for key in di.keys():
print(key)
遍历value值
di = {"name":"张三","age":19,"sex":"男"}
for v in di.values():
print(v)
遍历字典项
di = {"name":"张三","age":19,"sex":"男"}
for k,v in di.items()
print(k,v)
8.小结