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。

  1. knowledge = ['语文', '数学', '英语']
  2. scores = dict.fromkeys(knowledge, 60)
  3. print(scores)
  4. ——————运行结果——————————
  5. {'语文': 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 该键不存在

  1. <a name="jKtcz"></a>
  2. ## 4. keys()、values() 和 items() 方法
  3. <a name="UzpjB"></a>
  4. ### 4.1 items()
  5. `**dict.items()**`返回**以元组为元素类型的伪列表(不具备列表的所有功能)**
  6. ```python
  7. dicts = {"nihao":1,"wohao":2,"dajiahao":3}
  8. for k,v in dicts.items():
  9. print(k,v)
  10. print(dicts.items())
  11. print(type(dicts.items()))
  12. lists = list(dicts.items()) # 通过将调用list()函数转换成真正的列表
  13. print(lists)
  14. nihao 1
  15. wohao 2
  16. dajiahao 3
  17. dict_items([('nihao', 1), ('wohao', 2), ('dajiahao', 3)])
  18. <class 'dict_items'>
  19. [('nihao', 1), ('wohao', 2), ('dajiahao', 3)]

4.2 keys()

**dict.keys()** —-> 返回一个key集合的伪列表,元素唯一不重复

  1. dicts = {"nihao":1,"wohao":2,"dajiahao":3}
  2. a = dicts.keys()
  3. print(a)
  4. print(type(a))
  5. print(list(a))
  6. dict_keys(['nihao', 'wohao', 'dajiahao'])
  7. <class 'dict_keys'>
  8. ['nihao', 'wohao', 'dajiahao']

4.3 values()

**dict.values()** ——-> 返回一个value集合的伪列表,元素唯一不重复

  1. dicts = {"nihao":1,"wohao":2,"dajiahao":3}
  2. a = dicts.values()
  3. print(a)
  4. print(type(a))
  5. print(list(a))
  6. dict_values([1, 2, 3])
  7. <class 'dict_values'>
  8. [1, 2, 3]

5. 删除字典元素

删除字典元素可以使用**clear()、pop()、popitem()**方法
**dict.clear **——>无参数,返回**None**
**dict.pop(key)** ——> 删除字典中指定的**key**,并返回**key**对应的值,如果key不存在则报错。
**dict.popitem()**——> 无需传参,删除最后一个键值对,并返回被删键值对的二元组。

  1. dicts = dict(a=1,b=2,c=3)
  2. print(dicts)
  3. print(dicts.clear())
  4. dicts = dict(a=1,b=2,c=3)
  5. print(dicts.pop("a"))
  6. print(dicts.popitem())
  7. {'a': 1, 'b': 2, 'c': 3}
  8. None
  9. 1
  10. ('c', 3)

6. 字典copy()函数

**dict.copy()**——> 该函数无参数,返回一个一模一样的内存地址不同的字典

  1. old_dicts = dict(a=1,b=2,c=3)
  2. new_dicts = old_dicts.copy()
  3. print(id(old_dicts) is not id(new_dicts))
  4. True