1. 特征
字典(dict)是一种无序的、可变的序列,它的元素以“键值对(key-value)”的形式存储,是 Python 中唯一的映射类型。
主要特征 | 解释 |
---|---|
通过键而不是通过索引来读取元素 | 字典类型有时也称为关联数组或者散列表(hash)。它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。 |
字典是任意数据类型的无序集合 | 和列表、元组不同,通常会将索引值 0 对应的元素称为第一个元素,而字典中的元素是无序的。 |
字典是可变的,并且可以任意嵌套 | 字典可以在原处增长或者缩短(无需生成一个副本),并且它支持任意深度的嵌套,即字典存储的值也可以是列表或其它的字典。 |
字典中的键必须唯一 | 字典中,不支持同一个键出现多次,否则只会保留最后一个键值对。 |
字典中的键必须不可变 | 字典中每个键值对的键是不可变的,只能使用数字、字符串或者元组,不能使用列表。 |
2. 创建字典
2.1 使用 { } 创建字典
使用{ }创建字典的语法格式如下:dictname = {‘key’:’value1’, ‘key2’:’value2’, …, ‘keyn’:valuen}
dictname 表示字典变量名,keyn : valuen 表示各个元素的键值对。需要注意的是,同一字典中的各个键必须唯一,不能重复。
字典的键可以是整数、字符串或者元组,只要符合唯一和不可变的特性就行;字典的值可以是 Python 支持的任意数据类型。
2.2 fromkeys() 方法创建字典
具体格式为:dictname = dict.fromkeys(list,value=None)
list 参数表示字典中所有键的列表(list);value 参数表示默认值,如果不写,则为空值 None。
knowledge = ['语文', '数学', '英语']
scores = dict.fromkeys(knowledge, 60)
print(scores)
——————运行结果——————————
{'语文': 60, '英语': 60, '数学': 60}
2.3 dict() 映射函数创建字典
通过 dict() 函数创建字典的写法有多种,以下常用的几种方式,它们创建的都是同一个字典 :
创建格式 | 注意事项 |
---|---|
a = dict(str1=value1, str2=value2, str3=value3) | str 表示字符串类型的键,value 表示键对应的值。使用此方式创建字典时,字符串不能带引号。 |
#方式1 demo = [(‘two’,2), (‘one’,1), (‘three’,3)] #方式2 demo = [[‘two’,2], [‘one’,1], [‘three’,3]] #方式3 demo = ((‘two’,2), (‘one’,1), (‘three’,3)) #方式4 demo = ([‘two’,2], [‘one’,1], [‘three’,3]) a = dict(demo) |
向 dict() 函数传入列表或元组,而它们中的元素又各自是包含 2 个元素的列表或元组,其中第一个元素作为键,第二个元素作为值。 |
keys = [‘one’, ‘two’, ‘three’] #还可以是字符串或元组 values = [1, 2, 3] #还可以是字符串或元组 a = dict( zip(keys, values) ) |
通过应用 dict() 函数和 zip() 函数,可将前两个列表转换为对应的字典。 |
如果不为 dict() 函数传入任何参数,则代表创建一个空的字典
3. 访问字典
列表和元组是通过下标来访问元素的,而字典不同,它通过键来访问对应的值。因为字典中的元素是无序的,每个元素的位置都不固定,所以字典也不能像列表和元组那样,采用切片的方式一次性访问多个元素。
**dictname[key]**
——>返回指定键对应的值,假如key不存在,则直接报错**dictname.get[ket[,default]]**
(default为可选参数) ——>返回指定键对应的值,如果**key**
不存在,则返**default**
,未指定**default**
,则返回**None**
```python a = dict(two=0.65, one=88, three=100, four=-59) print( a.get(‘one’) ) print( a.get(‘five’, ‘该键不存在’) )
————————运行结果—————— 88 该键不存在
<a name="jKtcz"></a>
## 4. keys()、values() 和 items() 方法
<a name="UzpjB"></a>
### 4.1 items()
`**dict.items()**`返回**以元组为元素类型的伪列表(不具备列表的所有功能)**
```python
dicts = {"nihao":1,"wohao":2,"dajiahao":3}
for k,v in dicts.items():
print(k,v)
print(dicts.items())
print(type(dicts.items()))
lists = list(dicts.items()) # 通过将调用list()函数转换成真正的列表
print(lists)
nihao 1
wohao 2
dajiahao 3
dict_items([('nihao', 1), ('wohao', 2), ('dajiahao', 3)])
<class 'dict_items'>
[('nihao', 1), ('wohao', 2), ('dajiahao', 3)]
4.2 keys()
**dict.keys()**
—-> 返回一个key集合的伪列表,元素唯一不重复
dicts = {"nihao":1,"wohao":2,"dajiahao":3}
a = dicts.keys()
print(a)
print(type(a))
print(list(a))
dict_keys(['nihao', 'wohao', 'dajiahao'])
<class 'dict_keys'>
['nihao', 'wohao', 'dajiahao']
4.3 values()
**dict.values()**
——-> 返回一个value集合的伪列表,元素唯一不重复
dicts = {"nihao":1,"wohao":2,"dajiahao":3}
a = dicts.values()
print(a)
print(type(a))
print(list(a))
dict_values([1, 2, 3])
<class 'dict_values'>
[1, 2, 3]
5. 删除字典元素
删除字典元素可以使用**clear()、pop()、popitem()**
方法**dict.clear **
——>无参数,返回**None**
。**dict.pop(key)**
——> 删除字典中指定的**key**
,并返回**key**
对应的值,如果key不存在则报错。**dict.popitem()**
——> 无需传参,删除最后一个键值对,并返回被删键值对的二元组。
dicts = dict(a=1,b=2,c=3)
print(dicts)
print(dicts.clear())
dicts = dict(a=1,b=2,c=3)
print(dicts.pop("a"))
print(dicts.popitem())
{'a': 1, 'b': 2, 'c': 3}
None
1
('c', 3)
6. 字典copy()函数
**dict.copy()**
——> 该函数无参数,返回一个一模一样的内存地址不同的字典
old_dicts = dict(a=1,b=2,c=3)
new_dicts = old_dicts.copy()
print(id(old_dicts) is not id(new_dicts))
True