Python/Article/PythonBasis/python4/Dict.md

202 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 一、字典(Dictionary) #
## 1、什么是 dict字典 ##
上一章节我们学习了列表List 和 元组tuple 来表示有序集合。
而我们在讲列表list的时候我们用了列表list 来存储用户的姓名。
```python
name = ['一点水', '两点水', '三点水', '四点水', '五点水']
```
那么如果我们为了方便联系这些童鞋,要把电话号码也添加进去,该怎么做呢?
用 list 可以这样子解决:
```python
name = [['一点水', '131456780001'], ['两点水', '131456780002'], ['三点水', '131456780003'], ['四点水', '131456780004'], ['五点水', '131456780005']]
```
但是这样很不方便,我们把电话号码记录下来,就是为了有什么事能及时联系上这些童鞋。
如果用列表来存储这些,列表越长,我们查找起来耗时就越长。
这时候就可以用 dict 字典来表示了Python 内置了 字典dictdict 全称 dictionary如果学过 Java ,字典就相当于 JAVA 中的 map使用键-值key-value存储具有极快的查找速度。
```python
name = {'一点水': '131456780001', '两点水': '131456780002', '三点水': '131456780003', '四点水': '131456780004', '五点水': '131456780005'}
```
## 2、dict (字典)的创建 ##
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
```python
dict = {key1 : value1, key2 : value2 }
```
注意:键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的。
创建 dict字典实例
```python
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'两点水':'333333'}
dict2={'abc':1234,1234:'abc'}
```
## 3、访问 dict (字典) ##
我们知道了怎么创建列表了,回归到一开始提出到的问题,为什么使用字典能让我们很快的找出某个童鞋的电话呢?
```python
name = {'一点水': '131456780001', '两点水': '131456780002', '三点水': '131456780003', '四点水': '131456780004', '五点水': '131456780005'}
print(name['两点水'])
```
输出的结果:
```
131456780002
```
可以看到,如果你知道某个人的名字,也就是 key 值, 就能很快的查找到他对应的电话号码,也就是 Value 。
这里需要注意的一点是:如果字典中没有这个键,是会报错的。
## 4、修改 dict (字典) ##
向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对
```python
#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'两点水':'333333'}
print(dict1)
# 新增一个键值对
dict1['jack']='444444'
print(dict1)
# 修改键值对
dict1['liangdianshui']='555555'
print(dict1)
```
输出的结果:
```
{'liangdianshui': '111111', 'twowater': '222222', '两点水': '333333'}
{'liangdianshui': '111111', 'twowater': '222222', '两点水': '333333', 'jack': '444444'}
{'liangdianshui': '555555', 'twowater': '222222', '两点水': '333333', 'jack': '444444'}
```
## 5、删除 dict (字典) ##
通过 `del` 可以删除 dict (字典)中的某个元素,也能删除 dict (字典)
通过调用 `clear()` 方法可以清除字典中的所有元素
```python
#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'两点水':'333333'}
print(dict1)
# 通过 key 值,删除对应的元素
del dict1['twowater']
print(dict1)
# 删除字典中的所有元素
dict1.clear()
print(dict1)
# 删除字典
del dict1
```
输出的结果:
```
{'liangdianshui': '111111', 'twowater': '222222', '两点水': '333333'}
{'liangdianshui': '111111', '两点水': '333333'}
{}
```
## 6、 dict (字典)使用时注意的事项 ##
(1) dict (字典)是不允许一个键创建两次的,但是在创建 dict (字典)的时候如果出现了一个键值赋予了两次,会以最后一次赋予的值为准
例如:
```python
#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,'twowater':'222222' ,'两点水':'333333','twowater':'444444'}
print(dict1)
print(dict1['twowater'])
```
输出的结果:
```
{'liangdianshui': '111111', 'twowater': '444444', '两点水': '333333'}
444444
```
(2) dict (字典)键必须不可变,可是键可以用数字,字符串或元组充当,但是就是不能使用列表
例如:
```python
#-*-coding:utf-8-*-
dict1={'liangdianshui':'111111' ,123:'222222' ,(123,'tom'):'333333','twowater':'444444'}
print(dict1)
```
输出结果:
```
{'liangdianshui': '111111', 123: '222222', (123, 'tom'): '333333', 'twowater': '444444'}
```
(3) dict 内部存放的顺序和 key 放入的顺序是没有任何关系
和 list 比较dict 有以下几个特点:
* 查找和插入的速度极快不会随着key的增加而变慢
* 需要占用大量的内存,内存浪费多
而list相反
* 查找和插入的时间随着元素的增加而增加
* 占用空间小,浪费内存很少
## 7、dict (字典) 的函数和方法 ##
|方法和函数|描述|
|---------|--------|
|len(dict)|计算字典元素个数|
|str(dict)|输出字典可打印的字符串表示|
|type(variable)|返回输入的变量类型,如果变量是字典就返回字典类型|
|dict.clear()|删除字典内所有元素|
|dict.copy()|返回一个字典的浅复制|
|dict.values()|以列表返回字典中的所有值|
|popitem()|随机返回并删除字典中的一对键和值|
|dict.items()|以列表返回可遍历的(键, 值) 元组数组|