1. 简介
结构化数据是指有明确属性,明确表示规则的数据
列表在表达结构化数据时语义不明确
列表有序存储数据,按索引值进行提取
字典采用键值方式存储数据,数据无序存储
- 字典采用
键(key):值(value)
形式表达数据- 字典中
key
不允许重复,value
允许重复- 字典是可修改的,运行时动态调整存储空间
字典也被称为
哈希(hash)
,对应散列值
散列值是从任何一种数据中创建数字指纹
Python中提供了hash()
函数生成散列值
2. 创建字典
使用
{}
用法:字典名 = {'key': value, 'key': value...}
字典的key与value之间用冒号:
分隔,键值对之间用逗号,
分隔,key
约定俗成建议最好使用英文
# 创建空字典
>>> dict1 = {}
>>> print(dict1)
{}
# 创建一个个人信息字典
>>> dict2 = {'name': '张三', 'sex': '男',
'hiredate': '1994-10-14', 'grade': 'A',
'job': '销售', 'salary': 1000,
'welfare': 100
}
>>> print(dict2)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'A', 'job': '销售', 'salary': 1000, 'welfare': 100}
函数:
dict()
用法:dict(key=value, key=value...)
使用函数 dict()
创建字典时,key不能使用引号引起来,否则会报错
函数:
dict.fromkeys()
用法:dict.fromkeys([key列表], '默认值')
fromkeys
必须配合 dict函数
使用,将给定列表中的每个元素作为 key
,默认值为 value
,默认值不设置则为 None
# 利用函数dict()创建字典
>>> dict3 = dict(name='张三',sex='男',hiredate='1994-10-14',grade='A',job='销售',salary=1000,welfare=100)
>>> print(dict3)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'A', 'job': '销售', 'salary': 1000, 'welfare': 100}
# 不设置默认值则所有键的值为None
>>> dict4 = dict.fromkeys(['name', 'sex', 'hiredate', 'grade', 'job', 'salary', 'welfare'])
>>> print(dict4)
{'name': None, 'sex': None, 'hiredate': None, 'grade': None, 'job': None, 'salary': None, 'welfare': None}
# 给键设置了默认值N/A
>>> dict4 = dict.fromkeys(['name', 'sex', 'hiredate', 'grade', 'job', 'salary', 'welfare'], 'N/A')
>>> print(dict4)
{'name': 'N/A', 'sex': 'N/A', 'hiredate': 'N/A', 'grade': 'N/A', 'job': 'N/A', 'salary': 'N/A', 'welfare': 'N/A'}
3. 字典的访问
3.1 字典的取值操作
字典名['key']
跟列表取单值方法类似,当获取的key
不存在时会报错
函数:
get()
用法:字典名.get('key')
当获取的 key
不存在时,不报错,返回 None
可以用 get('key', '值')
给键设置默认值,当键存在时返回其值,不存在时返回设置的默认值
# 定义一个字典
>>> employee = {'name': '张三', 'sex': '男',
'hiredate': '1994-10-14', 'grade': 'A',
'job': '销售', 'salary': 1000,
'welfare': 100
}
# 取值
>>> print(employee['name'])
张三
# 函数get()取值
>>> print(employee.get('name'))
张三
# 取不存在key值(报错)
>>> print(employee['age'])
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
print(employee['age'])
KeyError: 'age'
# get()取不存在的key值
>>> print(employee.get('age'))
None
# 用get设置不存在键的默认值
print(employee.get('age', 26))
26
3.2 给字典设置默认值
函数:
setdefault()
用法:字典名.setdefault('key', 默认值)
为指定key设置默认值,如果key已存在则忽略,不存在则设置,默认值不设置则为 None
>>> emp1 = {'name': 'jacky', 'grade': 'B'}
>>> emp2 = {'name': 'lily', 'grade': 'A'}
#当key存在时
>>> emp1.setdefault('grade', 'C')
'B'
>>> print(emp1)
{'name': 'jacky', 'grade': 'B'}
#当key不存在时
>>> emp2.setdefault('sex', '男')
'男'
>>> print(emp2)
{'name': 'lily', 'grade': 'A', 'sex': '男'}
get()
是获取字典key的值
,key存在时返回其值,不存在则返回设置的默认值
,不会改变字典原有数据setdefault()
是设置字典key的值
,key存在忽略,不存在则新增并设置默认值
,当key不存在时会改变字典数据
3.3 格式化输出字典
函数:
format_map()
用法:"{key}, {key}".format_map(字典名)
老版本的字符串格式化:%(key)s, %(key)s" %字典名
>>> emp = {'name': 'jacky', 'grade': 'B', 'hiredate': '2020-05-30'}
# 老版本格式化字符串
>>> emp_old_str = "姓名:%(name)s, 评级:%(grade)s, 入职时间:%(hiredate)s" %emp
>>> print(emp_old_str)
姓名:jacky, 评级:B, 入职时间:2020-05-30
# 新版本格式化字符串
>>> emp_new_str = "姓名:{name}, 评级:{grade}, 入职时间:{hiredate}".format_map(emp)
>>> print(emp_new_str)
姓名:jacky, 评级:B, 入职时间:2020-05-30
3.4 判断key存在与否
'key' in 字典名
'key' not in 字典名
in
存在返回 True
,不存在返回 False
not in
则相反
3.5 遍历字典
3.5.1 遍历key
for k in 字典名:
键:k
值:字典名[k]
>>> employee = {'name': '张三', 'sex': '男',
'hiredate': '1994-10-14', 'grade': 'A',
'job': '销售', 'salary': 1000,
'welfare': 100
}
>>> for k in employee:
print("键: {}".format(k)) #取键
print("值: {}".format(employee[k])) #取值
键: name
值: 张三
-- snip --
for k in 字典名.keys():
键:k
值:字典名[k]
函数 keys()
用于获取字典的所有键
用法:字典名.keys()
使用 type()
打印类型会发现是一个特殊的 dict_keys
类型
# 效果与示例1相同
>>> employee = {'name': '张三', 'sex': '男',
'hiredate': '1994-10-14', 'grade': 'A',
'job': '销售', 'salary': 1000,
'welfare': 100
}
>>> for k in employee.keys():
print("键: {}".format(k))
print("值: {}".format(employee[k]))
键: name
值: 张三
-- snip --
# 一个特殊的dict_keys类型
>>> employee.keys()
dict_keys(['name', 'sex', 'hiredate', 'grade', 'job', 'salary', 'welfare'])
>>> type(employee.keys())
<class 'dict_keys'>
3.5.2 遍历value
for v in 字典名.value():
值:v
函数 values()
用于获取字典的所有值
用法:字典名.values()
使用 type()
打印类型会发现是一个特殊的 dict_values
类型
>>> employee = {'name': '张三', 'sex': '男',
'hiredate': '1994-10-14', 'grade': 'A',
'job': '销售', 'salary': 1000,
'welfare': 100
}
>>> for v in employee.values():
print(v)
张三
男
-- snip --
# 一个特殊的dict_values类型
>>> employee.values()
dict_values(['张三', '男', '1994-10-14', 'A', '销售', 1000, 100])
>>> type(employee.values())
<class 'dict_values'>
3.5.3 遍历键值对
for k,v in 字典名.items():
键:k
值:v
函数 items()
用于获取字典的所有键值对
用法:字典名.items()
使用 type()
打印类型会发现是一个特殊的 dict_items
类型
>>> employee = {'name': '张三', 'sex': '男',
'hiredate': '1994-10-14', 'grade': 'A',
'job': '销售', 'salary': 1000,
'welfare': 100
}
>>> for k,v in employee.items():
print("键: {}".format(k))
print("值: {}".format(v))
键: name
值: 张三
-- snip --
# 一个特殊的dict_items类型
>>> employee.items()
dict_items([('name', '张三'), ('sex', '男'), ('hiredate', '1994-10-14'), ('grade', 'A'), ('job', '销售'), ('salary', 1000), ('welfare', 100)])
>>> type(employee.items())
<class 'dict_items'>
dict_
开头的类型,被称为字典的视图对象
,视图对象会随着字典的内容随时发生变化
4. 字典的更新、增加与删除
4.1 更新
字典名['key'] = 新值
字典单个值更新的方法与列表相同
函数:
update()
用法:字典名.update(键=值, 键=值...)
使用 update()
更新字典值时,()
内的 键
不要加引号,否则会报错
>>> employee = {'name': '张三', 'sex': '男',
'hiredate': '1994-10-14', 'grade': 'A',
'job': '销售', 'salary': 1000,
'welfare': 100
}
#更新单值
>>> employee['grade'] = 'B'
>>> print(employee)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'B', 'job': '销售', 'salary': 1000, 'welfare': 100}
# 更新多值
>>> employee.update(salary=1200, welfare=150)
>>> print(employee)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'B', 'job': '销售', 'salary': 1200, 'welfare': 150}
4.2 增加
字典的新增与更新操作完全相同,秉承有则更新,无则新增的原则(更新的值不存在就增加)
>>> employee = {'name': '张三', 'sex': '男',
'hiredate': '1994-10-14', 'grade': 'A',
'job': '销售', 'salary': 1000,
'welfare': 100
}
#无则新增
>>> employee['dept'] = '研发部'
>>> print(employee)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'A', 'job': '销售', 'salary': 1000, 'welfare': 100, 'dept': '研发部'}
#有则更新
>>> employee['dept'] = '市场部'
>>> print(employee)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'A', 'job': '销售', 'salary': 1000, 'welfare': 100, 'dept': '市场部'}
#新增多值时同理
>>> employee.update(weight=80, dept='财务部')
>>> print(employee)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'A', 'job': '销售', 'salary': 1000, 'welfare': 100, 'dept': '财务部', 'weight': 80}
4.3 删除
del
语句
用法:del 字典名['key']
>>> employee = {'name': '张三', 'sex': '男',
'hiredate': '1994-10-14', 'grade': 'A',
'job': '销售', 'salary': 1000,
'welfare': 100
}
>>> del employee['salary']
>>> print(employee)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'A', 'job': '销售', 'welfare': 100}
函数:
pop()
用法:字典名.pop('key')
>>> employee = {'name': '张三', 'sex': '男',
'hiredate': '1994-10-14', 'grade': 'A',
'job': '销售', 'salary': 1000,
'welfare': 100
}
>>> employee.pop('hiredate')
'1994-10-14'
>>> print(employee)
{'name': '张三', 'sex': '男', 'grade': 'A', 'job': '销售', 'salary': 1000, 'welfare': 100}
函数:
popitem()
用法:字典名.popitem()
>>> employee = {'name': '张三', 'sex': '男',
'hiredate': '1994-10-14', 'grade': 'A',
'job': '销售', 'salary': 1000,
'welfare': 100
}
>>> employee.popitem()
('welfare', 100)
>>> print(employee)
{'name': '张三', 'sex': '男', 'hiredate': '1994-10-14', 'grade': 'A', 'job': '销售', 'salary': 1000}
函数:
clear()
用法:字典名.clear()
用 字典名 = {}
也可以清空字典,清空后返回一个空字典
# clear()函数
>>> employee = {'name': '张三', 'sex': '男',
'hiredate': '1994-10-14', 'grade': 'A',
'job': '销售', 'salary': 1000,
'welfare': 100
}
>>>
>>> employee.clear()
>>> print(employee)
{}
#效果相同
>>> employee = {}
>>> print(employee)
{}