📅  最后修改于: 2020-09-19 13:46:25             🧑  作者: Mango
Python字典是项目的无序集合。字典的每个项目都有一个key/value
对。
字典被优化以在键已知时检索值。
创建字典就像将项目放在用逗号分隔的大括号{}
一样简单。
一个项目具有一个key
和一个表示为对的对应value
( key:value )。
虽然值可以是任何数据类型并且可以重复,但是键必须是不可变的类型(具有不可变元素的字符串,数字或元组)并且必须是唯一的。
# empty dictionary
my_dict = {}
# dictionary with integer keys
my_dict = {1: 'apple', 2: 'ball'}
# dictionary with mixed keys
my_dict = {'name': 'John', 1: [2, 4, 3]}
# using dict()
my_dict = dict({1:'apple', 2:'ball'})
# from sequence having each item as a pair
my_dict = dict([(1,'apple'), (2,'ball')])
从上面可以看到,我们还可以使用内置的dict()
函数创建字典。
虽然索引与其他数据类型一起使用来访问值,但是字典使用keys
。键可以在方括号[]
内使用,也可以与get()
方法一起使用。
如果我们使用方括号[]
,则在字典中找不到键的情况下会引发KeyError
。另一方面,如果未找到键,则get()
方法将返回None
。
# get vs [] for retrieving elements
my_dict = {'name': 'Jack', 'age': 26}
# Output: Jack
print(my_dict['name'])
# Output: 26
print(my_dict.get('age'))
# Trying to access keys which doesn't exist throws error
# Output None
print(my_dict.get('address'))
# KeyError
print(my_dict['address'])
输出
Jack
26
None
Traceback (most recent call last):
File "", line 15, in
print(my_dict['address'])
KeyError: 'address'
字典是可变的。我们可以使用赋值运算符添加新项或更改现有项的值。
如果密钥已经存在,那么现有值将被更新。如果键不存在,则将新的( key:value )对添加到字典中。
# Changing and adding Dictionary Elements
my_dict = {'name': 'Jack', 'age': 26}
# update value
my_dict['age'] = 27
#Output: {'age': 27, 'name': 'Jack'}
print(my_dict)
# add item
my_dict['address'] = 'Downtown'
# Output: {'address': 'Downtown', 'age': 27, 'name': 'Jack'}
print(my_dict)
输出
{'name': 'Jack', 'age': 27}
{'name': 'Jack', 'age': 27, 'address': 'Downtown'}
我们可以使用pop()
方法删除字典中的特定项目。此方法使用提供的key
删除项目并返回value
。
popitem()
方法可用于从字典中删除并返回任意(key, value)
项对。使用clear()
方法可以一次删除所有项目。
我们还可以使用del
关键字删除单个项或整个字典本身。
# Removing elements from a dictionary
# create a dictionary
squares = {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# remove a particular item, returns its value
# Output: 16
print(squares.pop(4))
# Output: {1: 1, 2: 4, 3: 9, 5: 25}
print(squares)
# remove an arbitrary item, return (key,value)
# Output: (5, 25)
print(squares.popitem())
# Output: {1: 1, 2: 4, 3: 9}
print(squares)
# remove all items
squares.clear()
# Output: {}
print(squares)
# delete the dictionary itself
del squares
# Throws Error
print(squares)
输出
16
{1: 1, 2: 4, 3: 9, 5: 25}
(5, 25)
{1: 1, 2: 4, 3: 9}
{}
Traceback (most recent call last):
File "", line 30, in
print(squares)
NameError: name 'squares' is not defined
下表提供了词典可用的方法。在上面的示例中已经使用了其中一些。
以下是这些方法的一些示例用例。
# Dictionary Methods
marks = {}.fromkeys(['Math', 'English', 'Science'], 0)
# Output: {'English': 0, 'Math': 0, 'Science': 0}
print(marks)
for item in marks.items():
print(item)
# Output: ['English', 'Math', 'Science']
print(list(sorted(marks.keys())))
输出
{'Math': 0, 'English': 0, 'Science': 0}
('Math', 0)
('English', 0)
('Science', 0)
['English', 'Math', 'Science']
字典理解是一种用Python的迭代器创建新字典的简洁明了的方法。
字典理解由一个表达式对( 键:值 )和大括号{}
的for
语句组成。
这是制作字典的示例,其中每个项目都是一对数字及其平方。
# Dictionary Comprehension
squares = {x: x*x for x in range(6)}
print(squares)
输出
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
此代码等效于
squares = {}
for x in range(6):
squares[x] = x*x
print(squares)
输出
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
词典理解可以选择包含更多for或if语句。
可选的if
语句可以过滤出项以形成新字典。
以下是一些仅包含奇数项的字典的示例。
# Dictionary Comprehension with if conditional
odd_squares = {x: x*x for x in range(11) if x % 2 == 1}
print(odd_squares)
输出
{1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
要了解更多字典理解,请访问Python字典理解。
我们可以使用中的关键字来测试key
是否在字典in
。请注意,成员资格测试仅适用于keys
,不适用于values
。
# Membership Test for Dictionary Keys
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# Output: True
print(1 in squares)
# Output: True
print(2 not in squares)
# membership tests for key only not value
# Output: False
print(49 in squares)
输出
True
True
False
我们可以使用for
循环遍历字典中的每个键。
# Iterating through a Dictionary
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
for i in squares:
print(squares[i])
输出
1
9
25
49
81
诸如all()
, any()
, len()
, cmp()
, sorted()
等内置函数通常与字典一起使用以执行不同的任务。
以下是一些使用内置函数来处理字典的示例。
# Dictionary Built-in Functions
squares = {0: 0, 1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# Output: False
print(all(squares))
# Output: True
print(any(squares))
# Output: 6
print(len(squares))
# Output: [0, 1, 3, 5, 7, 9]
print(sorted(squares))
输出
False
True
6
[0, 1, 3, 5, 7, 9]