Python 字典
Python 字典是一种内置数据类型,用于以键值对形式存储数据。它是一个无序、可变且有索引的集合。字典中的每个键都是唯一的,并映射到一个值。字典通常用于存储相关数据,例如与特定实体或对象关联的信息,您可以在其中根据其键快速检索值。
Python 的字典是 Map 类型的一个示例。映射对象将一个对象的值“映射”到另一个对象。为了在键和值之间建立映射,请在两者之间放置冒号 ( : ) 符号。
注意:每个键值对用逗号分隔,并用大括号 {} 括起来。每对中的 key 和 value 用冒号 ( : ) 分隔,形成结构 key:value。
下面给出一些 Python 字典对象的示例 -
capitals = {"Maharashtra":"Mumbai", "Gujarat":"Gandhinagar", "Telangana":"Hyderabad", "Karnataka":"Bengaluru"}
numbers = {10:"Ten", 20:"Twenty", 30:"Thirty",40:"Forty"}
marks = {"Savita":67, "Imtiaz":88, "Laxman":91, "David":49}
字典的主要特点
以下是字典的主要特点 -
- 无序 - 字典中的元素没有特定的顺序。3.7 版之前的 Python 字典不保持插入顺序。从 Python 3.7 开始,字典将插入顺序作为一项语言功能进行维护。
- 可变 - 创建字典后,您可以更改、添加或删除项目。
- 索引 - 尽管字典没有数字索引,但它们使用键作为索引来访问关联的值。
- 唯一键 - 字典中的每个键都必须是唯一的。如果您尝试为现有键分配值,则旧值将替换为新值。
- 异构 - 字典中的键和值可以是任何数据类型。
示例 1
只有数字、字符串或元组可以用作 key。它们都是不可变的。您可以使用任何类型的对象作为值。因此,以下字典定义也是有效的 -
d1 = {"Fruit":["Mango","Banana"], "Flower":["Rose", "Lotus"]}
d2 = {('India, USA'):'Countries', ('New Delhi', 'New York'):'Capitals'}
print (d1)
print (d2)
它将产生以下输出 -
{'India, USA': 'Countries', ('New Delhi', 'New York'): 'Capitals'}
示例 2
Python 不接受可变对象(如列表作为 key),并引发 TypeError。
d1 = {["Mango","Banana"]:"Fruit", "Flower":["Rose", "Lotus"]}
print (d1)
将引发 TypeError -
File "C:\Users\Sairam\PycharmProjects\pythonProject\main.py", line 8, in <module>
d1 = {["Mango","Banana"]:"Fruit", "Flower":["Rose", "Lotus"]}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: unhashable type: 'list'
示例 3
您可以将一个值分配给字典中的多个键,但一个键不能在字典中多次出现。
d1 = {"Banana":"Fruit", "Rose":"Flower", "Lotus":"Flower", "Mango":"Fruit"}
d2 = {"Fruit":"Banana","Flower":"Rose", "Fruit":"Mango", "Flower":"Lotus"}
print (d1)
print (d2)
它将产生以下输出 -
{'Fruit': 'Mango', 'Flower': 'Lotus'}
创建字典
在 Python 创建字典,方法是将逗号分隔的键值对序列放在大括号 {} 中,并使用冒号:分隔每个键及其关联值。或者,您可以使用 dict() 函数。
示例
以下示例演示了如何使用大括号和 dict() 函数创建名为 “student_info” 的字典 -
# 使用花括号{}创建词典
sports_player = {
"Name": "Sachin Tendulkar",
"Age": 48,
"Sport": "Cricket"
}
print ("使用花括号的词典:", sports_player)
# 使用dict()函数创建字典
student_info = dict(name="Alice", age=21, major="Computer Science")
print("字典使用dict():",student_info)
生成的结果如下所示 -
字典使用dict(): {'name': 'Alice', 'age': 21, 'major': 'Computer Science'}
访问字典项
您可以使用方括号 [] 或 get() 方法访问与特定键关联的值 -
student_info = {
"name": "Alice",
"age": 21,
"major": "Computer Science"
}
# 使用方括号访问值
name = student_info["name"]
print("姓名:",name)
# 使用get()方法访问值
age = student_info.get("age")
print("年龄:",age)
获得的结果如下 -
年龄: 21
修改字典项
您可以修改与特定键关联的值或添加新的键值对 -
student_info = {
"name": "Alice",
"age": 21,
"major": "计算机科学"
}
# 修改现有键值对
student_info["age"] = 22
# 添加新的键值对
student_info["graduation_year"] = 2023
print("修改后的词典是:",student_info)
上述代码的输出如下 -
删除字典项
您可以使用 del 语句、pop() 方法或 popitem() 方法删除项目 -
student_info = {
"name": "Alice",
"age": 22,
"major": "Computer Science",
"graduation_year": 2023
}
# 使用del语句删除项目
del student_info["major"]
# 使用pop()方法删除项目
graduation_year = student_info.pop("graduation_year")
print(student_info)
以下是上述代码的输出 -
遍历字典
您可以使用循环遍历字典中的键、值或键值对 -
student_info = {
"name": "Alice",
"age": 22,
"major": "Computer Science",
"graduation_year": 2023
}
# 遍历密钥
for key in student_info:
print("Keys:",key, student_info[key])
# 遍历值
for value in student_info.values():
print("Values:",value)
# 遍历键值对
for key, value in student_info.items():
print("Key:Value:",key, value)
执行上述代码后,我们得到以下输出 -
Keys: age 22
Keys: major Computer Science
Keys: graduation_year 2023
Values: Alice
Values: 22
Values: Computer Science
Values: 2023
Key:Value: name Alice
Key:Value: age 22
Key:Value: major Computer Science
Key:Value: graduation_year 2023
字典键的属性
字典值没有限制。它们可以是任意 Python 对象,可以是标准对象或用户定义的对象。但是,键并非如此。
关于字典键,有两个要点需要记住 -
dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'}
print ("dict['Name']: ", dict['Name'])
执行上述代码时,它会产生以下结果 -
键必须是不可变的。这意味着你可以使用字符串、数字或元组作为字典键,但不允许使用像 ['key'] 这样的东西。下面是一个简单的示例 -
dict = {['Name']: 'Zara', 'Age': 7}
print ("dict['Name']: ", dict['Name'])
执行上述代码时,它会产生以下结果 -
File "test.py", line 3, in <module>
dict = {['Name']: 'Zara', 'Age': 7};
TypeError: unhashable type: 'list'
Python 字典运算符
在 Python 中,定义以下运算符以用于字典操作数。在此示例中,使用了以下词典对象。
d1 = {'a': 2, 'b': 4, 'c': 30}
d2 = {'a1': 20, 'b1': 40, 'c1': 60}
运算符 | 描述 | 示例 |
---|---|---|
dict[key] | 提取/分配使用 key 映射的值 | print (d1['b']) retrieves 4 d1['b'] = 'Z' assigns new value to key 'b' |
dict1|dict2 | 两个字典对象的联合,返回新对象 | d3=d1|d2 ; print (d3) {'a': 2, 'b': 4, 'c': 30, 'a1': 20, 'b1': 40, 'c1': 60} |
dict1|=dict2 | 增强的字典联合运算符 | d1|=d2; print (d1) {'a': 2, 'b': 4, 'c': 30, 'a1': 20, 'b1': 40, 'c1': 60} |
Python 字典方法
Python 包括以下字典方法 -
方法 | 描述 |
---|---|
dict.clear() | 删除字典 dict 的所有元素 |
dict.copy() | 返回 dictionary dict 的浅表副本 |
dict.fromkeys() | 创建一个新字典,其中键来自 seq 并将 values 设置为 value。 |
dict.get(key, default=None) | 对于 key key,如果 key 不在字典中,则返回 value 或 default |
dict.has_key(key) | 如果字典 dict 中的 key 返回 true ,否则返回 false |
dict.items() | 返回 dict 的 (key, value) 元组对列表 |
dict.keys() | 返回字典 dict 的键列表 |
dict.setdefault(key, default=None) | 类似于 get(),但如果 key 还没有在 dict 中,则会设置 dict[key]=default |
dict.update(dict2) | 将字典 dict2 的键值对添加到 dict 中 |
dict.values() | 返回字典 dict 的值列表 |
带有字典的内置函数
以下是我们可以与字典一起使用的内置函数 -
函数 | 描述 |
---|---|
cmp(dict1, dict2) | 比较两个 dict 的元素。 |
len(dict) | 给出字典的总长度。这将等于字典中的项数。 |
str(dict) | 生成字典的可打印字符串表示形式 |
type(variable) | 返回传递的变量的类型。如果传递的变量是 dictionary,那么它将返回 dictionary 类型。 |