简介
Python 有各种内置的数据结构,能够存储不同类型的数据。Python 字典就是这样一个数据结构,它可以以键值对的形式存储数据--概念上类似于地图。Python 字典中的值可以用键来访问。
在本指南中,我们将详细讨论 Python 字典。首先,我们将介绍基本的字典操作 (创建一个字典,更新它,删除和添加元素,等等),之后再看看几个更有趣的方法。
如何在 Python 中创建一个字典
为了创建一个 Python 字典,我们在大括号中传递一串项目 (条目){} ,并用逗号 (,) 将它们分开。每个条目由一个键和一个值组成,也被称为键值对。
注意: 值可以属于任何数据类型,它们可以重复,但键必须保持唯一。此外,你不能给同一个键分配多个值,不过,你可以分配一个值的列表(作为一个单一的值)。
下面的例子演示了如何创建 Python 字典。
创建一个空的 dictionary。
example_dict = {}
创建一个有整数键的 dictionary。
example_dict = {1: 'mango', 2: 'pawpaw'}
创建一个有混合键的 dictionary。
example_dict = {'fruit': 'mango', 1: [4, 6, 8]}
另外,我们可以通过明确地调用 Python 的**dict()** 方法来创建一个 dictionary。
example_dict = dict({1:'mango', 2:'pawpaw'})
一个 dictionary 也可以从一个序列创建,如下图所示。
example_dict = dict([(1,'mango'), (2,'pawpaw')])
dictionary 也可以被嵌套,这意味着我们可以在另一个 dictionary 内创建一个 dictionary。比如说。
example_dict = {1: {'student1' : 'Nicholas', 'student2' : 'John', 'student3' : 'Mercy'},
2: {'course1' : 'Computer Science', 'course2' : 'Mathematics', 'course3' : 'Accounting'}}
要打印字典的内容,我们可以使用 Python 的print() 方法,并将字典的名称作为参数传给该方法。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
print(example_dict)
这样做的结果是
{'Company': 'Toyota', 'model': 'Premio', 'year': 2012}
如何访问 Python 字典中的元素
要访问字典中的项目--我们使用方括号符号传递键。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
x = example_dict["model"]
print(x)
这给我们提供了与*"model "键相关的值*。
Premio
你可以把 "配置 "项或普通常量存储到一个字典中,以便于集中访问。
example_dict = {'Name': 'Mercy', 'Age': 23, 'Course': 'Accounting'}
print("Student Name:", example_dict['Name'])
print("Course:", example_dict['Course'])
print("Age:", example_dict['Age'])
这将导致
Student Name: Mercy
Course: Accounting
Age: 23
dictionary 对象还提供了**get()** 方法,它也可以用来访问 dictionary 元素。我们用点运算符将该方法与字典的名称相加,然后将键的名称作为参数传给该方法。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
x = example_dict.get("model")
print(x)
这样的结果是
Premio
现在我们知道如何访问字典中的元素了!在下一节中,我们将讨论如何向已经存在的 dictionary 添加新的元素。
如何向 Python 词典中添加元素
有许多方法可以向 dictionary 中添加新元素。一个常见的方法是添加一个新的 key 并给它赋值。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
example_dict["Capacity"] = "1800CC"
print(example_dict)
当一个键不存在时,我们给它赋值 - 它被添加到字典中。
{'Capacity': '1800CC', 'year': 2012, 'Company': 'Toyota', 'model': 'Premio'}
新的元素以Capacity 为键,以1800CC 为其对应的值。它被添加为字典的第一个元素。下面是另一个例子。首先,让我们先创建一个空的 dictionary。
example_dict = {}
print("An Empty Dictionary: ")
print(example_dict)
让我们验证一下它是空的
An Empty Dictionary:
这个 dictionary 没有返回任何东西,因为它还没有存储任何东西。让我们向它添加一些元素,一次一个。
example_dict[0] = 'Apples'
example_dict[2] = 'Mangoes'
example_dict[3] = 20
print("\n3 elements have been added: ")
print(example_dict)
这样的结果是
3 elements have been added:
{0: 'Apples', 2: 'Mangoes', 3: 20}
为了添加这些元素,我们指定了键和相应的值。
example_dict[0] = 'Apples'
在上面的例子中,0 是键,Apples 是值。我们甚至可以在一个键上添加一组值,只要这组值可以作为一个单一的值被引用,比如一个集合。
# These three values are implicitly converted into a set
example_dict['Values'] = 1, "Pairs", 4
print("\n3 elements have been added: ")
print(example_dict)
这样我们就有了一个以集合为值的键。
3 elements have been added:
{'Values': (1, 'Pairs', 4)}
除了向字典中添加新的元素外,字典中的元素还可以被更新/改变,我们将在下一节介绍。
如何更新字典中的元素
在向 dictionary 中添加一个值后,我们可以修改现有的 dictionary 元素。你使用该元素的键来改变相应的值。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
example_dict["year"] = 2014
print(example_dict)
在这个例子中,我们将键值year 从旧值2012 更新为新值2014 。
{'year': 2014, 'model': 'Premio', 'Company': 'Toyota'}
如何删除字典中的元素
从字典中删除一个元素有几种方法,我们将在本节中逐一讨论。
del 关键字可以用来删除带有指定键的元素。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
del example_dict["year"]
print(example_dict)
这样做的结果是
{'Company': 'Toyota', 'model': 'Premio'}
我们调用del 关键字,后面是字典名称。在字典名称后面的方括号内,我们传递了我们需要从字典中删除的元素的键,在这个例子中是year 。然后字典中year 的条目被删除。
另一种删除键值对的方法是使用**pop()** 方法,把要删除的条目的键作为参数传给该方法。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
example_dict.pop("year")
print(example_dict)
我们调用pop() 方法,在它后面加上字典的名称。 运行这段代码将删除字典中year 的条目。
{'Company': 'Toyota', 'model': 'Premio'}
popitem() 方法将删除插入字典中的最后一个条目,不需要指定键。看一下下面的例子。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
example_dict.popitem()
print(example_dict)
插入 dictionary 的最后一个条目是year 。在调用popitem() 方法后,它已经被删除了。
{'Company': 'Toyota', 'model': 'Premio'}
但是如果你想删除整个 dictionary 呢?如果对每一个键都使用这些方法中的一个,将是很困难和麻烦的。相反,你可以使用del 关键字来删除整个 dictionary。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
del example_dict
print(example_dict)
但是,这段代码将返回一个错误。原因是我们试图访问一个不存在的 dictionary,因为它已经被事先删除了。
NameError: name 'example_dict' is not defined
根据不同的用例,你可能需要删除所有的 dictionary 元素,但不需要删除 dictionary 本身。这可以通过调用 dictionary 上的clear() 方法来实现。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
example_dict.clear()
print(example_dict)
这将给你一个空的 dictionary (因为所有的 dictionary 元素都被删除了)。
{}
Python 中其他常见的字典方法
除了我们到目前为止所涉及的方法之外,Python 还为我们提供了许多其他有趣的方法,帮助我们进行前面所描述的基本操作。在下面的小节中,我们将看看在 Python 中可以与字典一起使用的其他一些方法。
*len()*方法
用这个方法,你可以计算一个字典中的元素数量。比如说
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
print(len(example_dict))
字典中有三个条目,因此该方法将返回3 。
3
*copy()*方法
这个方法返回现有 dictionary 的一个副本。比如说。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
x = example_dict.copy()
print(x)
让我们确定这个拷贝是正确的,并分配给变量x 。
{'Company': 'Toyota', 'year': 2012, 'model': 'Premio'}
在控制台中打印x 后,你会看到它包含与存储在example_dict 字典中的相同的元素。
**注意:**这很有用,因为对复制的字典所做的修改不会影响到原来的字典。
*items()*方法
当被调用时,这个方法返回一个可迭代对象。这个可迭代对象有字典的键值对,作为列表中的图元。这个方法主要是在你想迭代一个 dictionary 的时候使用。
这个方法只是在 dictionary 对象的名称上调用,如下所示。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
for k, v in example_dict.items():
print(k, v)
这将导致。
('Company', 'Toyota')
('model', 'Premio')
('year', 2012)
由items() 返回的对象也可以用来显示在 dictionary 中实现的变化。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
x = example_dict.items()
print(x)
example_dict["model"] = "Mark X"
print(x)
这段代码说明,当你改变字典中的一个值时,items 对象也被更新以反映这个变化。
dict_items([('Company', 'Toyota'), ('model', 'Premio'), ('year', 2012)])
dict_items([('Company', 'Toyota'), ('model', 'Mark X'), ('year', 2012)])
*fromkeys()*方法
这个方法返回一个有指定键和值的 dictionary。它采用下面给出的语法。
dictionary.fromkeys(keys, value)
所需的keys 参数的值是 iterable,它指定了新字典的键。value 参数的值是可选的,它指定了所有键的默认值。其默认值是None 。
假设我们需要创建一个有三个键的字典,都有相同的值,例如25 。
name = ('John', 'Nicholas', 'Mercy')
age = 25
example_dict = dict.fromkeys(name, age)
print(example_dict)
让我们验证一下fromkeys() 方法是否创建了我们所描述的字典。
{'John': 25, 'Mercy': 25, 'Nicholas': 25}
不出所料,fromkeys() 方法能够挑选出这些键,并将它们与值25 结合起来,创建我们想要的字典。
keys 参数的值是强制性的。下面的例子演示了当没有指定values 参数的值时会发生什么。
name = ('John', 'Nicholas', 'Mercy')
example_dict = dict.fromkeys(name)
print(example_dict)
在这种情况下,None 被用作默认值。
{'John': None, 'Mercy': None, 'Nicholas': None}
*setdefault()*方法
这个方法适用于我们需要获得指定键的元素的值的时候。如果没有找到这个键,它将和指定的缺省值一起被插入字典。
该方法采用以下语法。
dictionary.setdefault(keyname, value)
在这个方法中,keyname 参数是必需的。它代表你需要返回一个值的项目的关键名称。value 参数是可选的。如果字典里已经有这个键,这个参数就没有任何作用。如果这个键不存在,那么在这个方法中给出的值将成为这个键的值。它的默认值是None 。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
x = example_dict.setdefault("color", "Gray")
print(x)
dictionary 中没有color 的键。setdefault() 方法插入了这个键,指定的值,即Gray ,被作为它的值。
Gray
下面的例子演示了如果键的值确实存在,该方法的行为方式。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
x = example_dict.setdefault("model", "Allion")
print(x)
值Allion 对字典没有影响,因为我们已经有一个键的值model 。
Premio
*keys()*方法
这个方法也返回一个可迭代的对象。返回的对象是 dictionary 中所有键的列表。而且就像items() 方法一样,返回的对象可以用来反映对 dictionary 所做的改变。
要使用这个方法,我们只在 dictionary 的名称上调用它,如下所示。
dictionary.keys()
例如。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
x = example_dict.keys()
print(x)
这样的结果是:
dict_keys(['model', 'Company', 'year'])
很多时候,这个方法被用来遍历你的 dictionary 中的每个键。
example_dict = {
"Company": "Toyota",
"model": "Premio",
"year": 2012
}
for k in example_dict.keys():
print(k)
这将在一个单独的行中打印example_dict 的每个键。
Company
model
year
结论
这标志着这个关于 Python 字典的指南的结束。这些字典以键-值对的形式存储数据。key作为项目的标识符,而value是项目的值。Python 字典带有多种方法,可以应用于数据的检索或操作。在这篇文章中,我们看到了如何创建、修改和删除 Python dictionary 以及一些最常用的 dictionary 方法。