本文以Python3以上为学习基础。
目录
1、字典格式详解
2、创建字典
3、修改字典的内容。
4、访问字典(dict)的值
5、字典的基本操作。
6、字典函数(方法)——copy:拷贝
7、字典函数(方法)——clear:清空字典中所有元素
8、字典函数(方法)——del:将字典删除
9、字典函数(方法)——get:得到字典中某个键的值
10、字典函数(方法)——setdefault:得到字典中某个键的值。
11、字典函数(方法)——pop:删除某个键值对。
12、字典函数(方法)——popitems:删除某个键值对。
13、字典函数(方法)——update:更新字典的内容。
14、字典函数(方法)——has_key:判断字典中是否存在某个键(Python3 已经删除这个方法了。)
字典(dict)其实就是大括号({})括起来的内容。
1、字典格式详解
在一个字典中,键是唯一的,不能重复。值则是对应于键,值可以重复。
键值之间用(:)英文的冒号,每一对键值之间用英文的逗号(,)隔开。
说白了:一个键对应一个值,一个值可以对应多个键。
2、创建字典
方法一:先创建空字典,随后在里面加入内容。
方法二:创建有内容的字典
方法三:利用元组在建构字典。
方法如下:
3、修改字典的内容。
空字典添加内容:
有内容的字典修改内容:
4、访问字典(dict)的值
方法:通过字典的“键”找到相应的“值”。
5、字典的基本操作。
- len(d),返回字典(d)中的键值对的数量
- d[key],返回字典(d)中的键(key)的值
- d[key]=value,将值(value)赋给字典(d)中的键(key)
- del d[key],删除字典(d)的键(key)项(将该键值对删除)
- key in d,检查字典(d)中是否含有键为key的项
(1)len():返回字典(d)中的键值对的数量
(2)d[key]:返回字典(d)中的键(key)的值
(3)d[key]=value:将值(value)赋给字典(d)中的键(key)
(4)del d[key]:删除字典(d)的键(key)项(将该键值对删除)
(5)key in d:检查字典(d)中是否含有键为key的项
6、字典函数(方法)——copy:拷贝
为什么要有copy函数?
特别注意:对象有类型,变量无类型,正是因着这句话,变量其实是一个标签。
我们通过 id() 查看对象在内存中的位置。
可以看到,在内存中的位置一模一样。
相同的原理,字典的赋值依旧是一样的现象。
这个就是所谓的:假装拷贝。
下面我们看看copy()。
很明显:copy()是为新的对象在内存中分配了空间。
这里提一句,python中的深浅拷贝问题。
看看下面的现象:
第一步:In[181]:我通过copy函数把tmp拷贝给tmp1。
第二步:In[182]:利用remove()函数把字典tmp1的键'a'的值中的2给移除出去。
第三步:In[183]:我们查看字典tmp之内。发现它还是发生了改变。
这是为什么???
这就是python的深浅拷贝问题了。
具体请参照博客:python的深浅拷贝详解。
7、字典函数(方法)——clear:清空字典中所有元素
清空以后字典就是空字典了。
8、字典函数(方法)——del:将字典删除
注意是将字典删除,从内存中删除。不是清空。
删除以后字典直接存储空间都没了。
9、字典函数(方法)——get:得到字典中某个键的值
注意:如果键不存在返回None。
正常取值情况:
例如下面例子:tmp.get('b') 和 tmp['b'] 是一样的。
如果键不存在,get() 返回Node:
例如下面例子:tmp.get('zxc') 返回None;tmp['zxc'] 报错。
10、字典函数(方法)——setdefault:得到字典中某个键的值。
和get()类似, 如果键不存在于字典中,将会添加键并将值设为默认值(None)。
如果找的值不存在呢?
在没有键的情况下,默认添加到字典中,设置对应的值是None。
11、字典函数(方法)——pop:删除某个键值对。
以字典的键为参数,删除指定键的键值对。结果的返回值是要删除键所对应的值。
如果是参数是键值对中的值。就会报错:
如果参数省略:
就会发生上述错误。
12、字典函数(方法)——popitems:删除某个键值对。
注意:不写参数。但是会随机删除一个键值对。因为字典是没有顺序的,所以是随机删除一个键值对。
如果写参数:
就会报错。
如果删除空字典呢?
就会提示字典是空的。出现对应错误。
13、字典函数(方法)——update:更新字典的内容。
这个函数没有返回值,或者说返回值是None,它的作用就是更新字典。
其参数可以是字典或者某种可迭代的数据类型。
字典tmp 更新入了 tmp1 那个字典,于是 tmp 中就多了一些内容,把 tmp1 的内容包含进来了。
tmp1当然还存在,并没有受到影响。
还有另一种更新方法:
这里有个知识点:列表的元组是键值对。