原文: https://www.programiz.com/python-programming/dictionary

在本教程中,您将学习有关 Python 字典的所有知识; 如何创建,访问,添加,删除元素以及各种内置方法。

Python 字典是无序的项目集合。 字典的每个项目都有一个键值对。

字典被优化以在键已知时检索值。


创建 Python 字典

创建字典就像将项目放在用逗号分隔的大括号{}中一样简单。

项具有key和表示为一对的相应value键值)。

虽然值可以是任何数据类型并且可以重复,但是键必须是不可变类型(字符串数字元组具有不可变元素)并且必须是唯一的。

  1. # empty dictionary
  2. my_dict = {}
  3. # dictionary with integer keys
  4. my_dict = {1: 'apple', 2: 'ball'}
  5. # dictionary with mixed keys
  6. my_dict = {'name': 'John', 1: [2, 4, 3]}
  7. # using dict()
  8. my_dict = dict({1:'apple', 2:'ball'})
  9. # from sequence having each item as a pair
  10. my_dict = dict([(1,'apple'), (2,'ball')])

从上面可以看到,我们还可以使用内置的dict()函数创建字典。


从字典访问元素

虽然索引与其他数据类型一起使用来访问值,但是字典使用keys。 可以在方括号[]内或get()方法中使用键。

如果我们使用方括号[],则在字典中找不到键的情况下会抛出KeyError。 另一方面,如果找不到键,则get()方法返回None

  1. # get vs [] for retrieving elements
  2. my_dict = {'name': 'Jack', 'age': 26}
  3. # Output: Jack
  4. print(my_dict['name'])
  5. # Output: 26
  6. print(my_dict.get('age'))
  7. # Trying to access keys which doesn't exist throws error
  8. # Output None
  9. print(my_dict.get('address'))
  10. # KeyError
  11. print(my_dict['address'])

输出

  1. Jack
  2. 26
  3. None
  4. Traceback (most recent call last):
  5. File "<string>", line 15, in <module>
  6. print(my_dict['address'])
  7. KeyError: 'address'

更改和添加字典元素

字典是可变的。 我们可以使用赋值运算符添加新项或更改现有项的值。

如果键已经存在,那么现有值将被更新。 如果键不存在,则将新的键值对添加到字典中。

  1. # Changing and adding Dictionary Elements
  2. my_dict = {'name': 'Jack', 'age': 26}
  3. # update value
  4. my_dict['age'] = 27
  5. #Output: {'age': 27, 'name': 'Jack'}
  6. print(my_dict)
  7. # add item
  8. my_dict['address'] = 'Downtown'
  9. # Output: {'address': 'Downtown', 'age': 27, 'name': 'Jack'}
  10. print(my_dict)

输出

  1. {'name': 'Jack', 'age': 27}
  2. {'name': 'Jack', 'age': 27, 'address': 'Downtown'}

从字典中删除元素

我们可以使用pop()方法删除字典中的特定项目。 此方法删除提供了key的项目并返回value

popitem()方法可用于从字典中删除并返回任意的(key, value)项目对。 使用clear()方法可以一次删除所有项目。

我们还可以使用del关键字删除单个项目或整个字典本身。

  1. # Removing elements from a dictionary
  2. # create a dictionary
  3. squares = {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
  4. # remove a particular item, returns its value
  5. # Output: 16
  6. print(squares.pop(4))
  7. # Output: {1: 1, 2: 4, 3: 9, 5: 25}
  8. print(squares)
  9. # remove an arbitrary item, return (key,value)
  10. # Output: (5, 25)
  11. print(squares.popitem())
  12. # Output: {1: 1, 2: 4, 3: 9}
  13. print(squares)
  14. # remove all items
  15. squares.clear()
  16. # Output: {}
  17. print(squares)
  18. # delete the dictionary itself
  19. del squares
  20. # Throws Error
  21. print(squares)

输出

  1. 16
  2. {1: 1, 2: 4, 3: 9, 5: 25}
  3. (5, 25)
  4. {1: 1, 2: 4, 3: 9}
  5. {}
  6. Traceback (most recent call last):
  7. File "<string>", line 30, in <module>
  8. print(squares)
  9. NameError: name 'squares' is not defined

Python 字典方法

下表列出了字典可用的方法。 在上面的示例中已经使用了其中一些。

方法 描述
clear() 从字典中删除所有项目。
copy() 返回字典的浅表副本。
fromkeys(seq[, v]) 返回一个新字典,其中的键从seq开始,其值等于v(默认为None)。
get(key [, d]) 返回key的值。 如果key不存在,则返回d(默认为None)。
items() 以(键,值)格式返回字典项的新对象。
keys() 返回字典键的新对象。
pop(key [, d]) 如果没有找到key,则用key删除该项目并返回其值或d。 如果未提供d,但未找到key,则它将弹出KeyError
popitem() 删除并返回任意项(键值)。 如果字典为空,则抛出KeyError
setdefault(key [, d]) 如果key在字典中,则返回相应的值。 如果不是,则插入key,其值为d,然后返回d(默认为None)。
update([other]) 使用other中的键/值对更新字典,覆盖现有键。
values() 返回字典值的新对象

以下是这些方法的一些示例用例。

  1. # Dictionary Methods
  2. marks = {}.fromkeys(['Math', 'English', 'Science'], 0)
  3. # Output: {'English': 0, 'Math': 0, 'Science': 0}
  4. print(marks)
  5. for item in marks.items():
  6. print(item)
  7. # Output: ['English', 'Math', 'Science']
  8. print(list(sorted(marks.keys())))

输出

  1. {'Math': 0, 'English': 0, 'Science': 0}
  2. ('Math', 0)
  3. ('English', 0)
  4. ('Science', 0)
  5. ['English', 'Math', 'Science']

Python 字典推导式

字典推导式是一种用 Python 中的可迭代对象创建新字典的简洁明了方法。

字典推导式由一个表达式对(键值)和大括号{}中的for语句组成。

这是制作字典的示例,其中每个项目都是一对数字及其平方。

  1. # Dictionary Comprehension
  2. squares = {x: x*x for x in range(6)}
  3. print(squares)

输出

  1. {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

此代码等效于

  1. squares = {}
  2. for x in range(6):
  3. squares[x] = x*x
  4. print(squares)

输出

  1. {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

对于或语句,字典推导式可以可选地包含更多

可选的if语句可以过滤出项以形成新字典。

以下是一些仅包含奇数项的字典的示例。

  1. # Dictionary Comprehension with if conditional
  2. odd_squares = {x: x*x for x in range(11) if x % 2 == 1}
  3. print(odd_squares)

输出

  1. {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}

要了解更多字典推导式,请访问 Python 字典推导式


其他字典操作

字典成员资格测试

我们可以使用关键字in来测试key是否在字典中。 请注意,成员资格测试仅适用于keys,而不适用于values

  1. # Membership Test for Dictionary Keys
  2. squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
  3. # Output: True
  4. print(1 in squares)
  5. # Output: True
  6. print(2 not in squares)
  7. # membership tests for key only not value
  8. # Output: False
  9. print(49 in squares)

输出

  1. True
  2. True
  3. False

遍历字典

我们可以使用for循环遍历字典中的每个键。

  1. # Iterating through a Dictionary
  2. squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
  3. for i in squares:
  4. print(squares[i])

输出

  1. 1
  2. 9
  3. 25
  4. 49
  5. 81

字典内置函数

诸如all()any()len()cmp()sorted()等内置函数通常与字典一起使用以执行不同的任务。

函数 描述
all() 如果字典的所有键均为True(或者字典为空),则返回True
any() 如果字典的任何键为真,则返回True。 如果字典为空,则返回False
len() 返回字典中的长度(项目数)。
cmp() 比较两个字典的项目。 (在 Python 3 中不可用)
sorted() 返回字典中新排序的键列表。

以下是一些使用内置函数来处理字典的示例。

  1. # Dictionary Built-in Functions
  2. squares = {0: 0, 1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
  3. # Output: False
  4. print(all(squares))
  5. # Output: True
  6. print(any(squares))
  7. # Output: 6
  8. print(len(squares))
  9. # Output: [0, 1, 3, 5, 7, 9]
  10. print(sorted(squares))

输出

  1. False
  2. True
  3. 6
  4. [0, 1, 3, 5, 7, 9]