1、字典介绍
**
字典并不是什么全新的概念,我们接触的字典,就是《新华字典》,新华字典的结构和python语言中的字典,在结构上是一样的。咱们以读音来查找一个汉字,比如”张”这个字,读音是zhang,一声,你一定可以在字典里找到与它对应的页数,假设是第100页,那么zhang 和 100之间就有一个映射关系,你知道了zhang,也就知道了100
另一个较为常见的例子是手机通讯录,你想找一个人的电话时,你应该在通讯录里找到这个人的名字,然后点进去查看它的电话号,姓名和电话号之间存在着映射关系,你知道姓名,就知道电话号
下面这张图展示了字典的数据结构
左侧是key,右侧是value。
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值对用冒号分割,每个对之间用逗号分隔,整个字典包括花括号{}中,格式如下:
字典键的特性
字典值可以没有限制地取任何Python对象,既可以是标准的对象,也可以是用户定义的,但键不行。
有两点需要注意:
- 不允许同一个键出现两次
- 创建时如果同一个键被赋值两次,后一个值会被记住。
2、创建一个字典
字典里存储的是键值对,键值对用冒号分割key与value,每个键值(key-value)对用逗号分割,整个字典包裹在花括号{}中 ```bash contacts_dict = { “小王”: ‘13892339876’, “小张”: ‘13898320987’, “小李”: ‘13890348745’ }
空字典
empty_dict = {}
dict = {‘Name’: ‘Zara’, ‘Age’: 7, ‘Class’: ‘First’};
注意: **什么数据可以做key**
数据必须是可hash的,下面罗列的5种数据类型是可以做字典key的数据类型
1. bool
1. int
1. float
1. 字符串
1. 元组
下面3中数据类型不可以做字典的key
1. 列表
1. 集合
1. 字典
凡是可变对象都不可以做字典的key,凡是不可变对象,都可以做字典的key
<a name="teFNc"></a>
### 3、访问字典里的值
```bash
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
print "dict['Name']: ", dict['Name'];
print "dict['Age']: ", dict['Age'];
#结果
dict['Name']: Zara
dict['Age']: 7
如果用字典里没有的键访问数据,会输出错误如下:
Traceback (most recent call last):
File "test.py", line 5, in <module>
print "dict['Alice']: ", dict['Alice'];
4、新增键值对和修改value
#修改value数据
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
score_dict['小丽'] = 100
print(score_dict['小丽'])
#新增键值对
score_dict['小兰'] = 89
print(score_dict)
#结果:
{'小明': 96, '小刚': 98, '小红': 94, '小兰': 89}
#如果key不存在
Traceback (most recent call last):
File "/Users/kwsy/PycharmProjects/pythonclass/mytest/demo.py", line 7, in <module>
print(score_dict['小丽'])
KeyError: '小丽'
5、删除字典
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
del dict['Name'] # 删除键是'Name'的条目
dict.clear() # 清空词典所有条目
del dict # 删除词典
print("dict['Age']: ", dict['Age'])
print("dict['School']: ", dict['School'])
6、python嵌套字典
stu_dict = {
'name': '小明',
'age': 12,
'score': {
'语文': 90,
'数学': 98
}
}
print(stu_dict['score']['语文'])
7、字典遍历
#遍历键
dict1 = {'name': 'TOM', 'age': 20, 'gender': '男'}
for key in dict1.keys():
print(key)
#遍历键值对
dict1 = {'name': 'TOM', 'age': 20, 'gender': '男'}
for item in dict1.items():
print(item)
#结果
('name', 'TOM')
('age', 20)
('gender', '男')
8、python字典方法介绍
方法 | 功能作用 |
---|---|
clear() | 删除字典内所有的元素 |
copy() | 返回字典的浅复制 |
fromkeys() | 以指定key创建一个新的字典 |
get() | 返回指定key的值 |
items() | 成对返回所有key和value |
keys() | 返回字典所有的key |
values | 返回字典所有value |
setdefault() | 为key设置对应的默认值 |
update() | 更新字典 |
pop() | 删除键值对 |
#copy
dic1 = {
'小明': 98
}
dic2 = dic1.copy()
print(dic1)
print(dic2)
{'小明': 98}
{'小明': 98}
import copy
dic1 = {
'小明': 98
}
dic2 = copy.copy(dic1)
print(dic1)
print(dic2)
{'小明': 98}
{'小明': 98}
这两段代码都实现了浅复制,浅复制是一种危险的复制,建议你不要使用
因为这种复制并没有创建新的对象,因此,你对dic2的修改会影响到dic1
#fromkeys,以指定key创建一个新的字典
stu_dict = dict.fromkeys(['小明', '小刚'], 90)
print(stu_dict)
#结果
{'小明': 90, '小刚': 90}
#get,返回指定key的值
get方法,是一种安全的获取value的方法,如果key不存在,则返回default,default可以由你来指定,如果你不指定,则默认为None
empty_dict = {}
print(empty_dict.get('python'))
print(empty_dict.get('python', 100))
#结果
None
100
#items(),成对返回所有key和value
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
for key, value in score_dict.items():
print(key, value)
#keys,返回字典所有的key
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
keys = score_dict.keys()
print(keys, type(keys))
for key in keys:
print(key)
#values,返回字典所有value
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
values = score_dict.values()
print(values, type(values))
for value in values:
print(value)