在 Python 中,字典是一种内置的数据类型,它以键值对的形式存储数据。它是一个无序的、可变的且可索引的集合。每个字典中的键是唯一的,并映射到一个值。字典通常用于存储相关数据,例如与特定实体或对象相关的信息,在这里你可以根据键快速检索值。
Python 的字典是映射类型的一个例子。映射对象将一个对象的值映射到另一个对象。为了建立键与值之间的映射关系,在两者之间使用冒号(:)符号。
每个键值对由逗号分隔,并包含在花括号 {} 内。键和值在每一对中用冒号(:)分隔,形成 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}
字典的关键特性如下:
-
无序:字典中的元素没有特定的顺序。在 Python 版本 3.7 之前,字典不会保持插入顺序。从 Python 3.7 开始,字典作为语言特性保持插入顺序。
-
-
索引:尽管字典没有数字索引,它们使用键作为索引来访问关联的值。
-
唯一键:字典中的每个键必须是唯一的。如果你试图给现有的键赋值,旧的值将被新值替换。
-
示例 1
只有数字、字符串或元组可以用作键。所有这些都是不可变的。你可以使用任何类型的对象作为值。因此,以下定义的字典也是有效的:
d1 = {"Fruit":["Mango","Banana"], "Flower":["Rose", "Lotus"]}
d2 = {('India, USA'):'Countries', ('New Delhi', 'New York'):'Capitals'}
print(d1)
print(d2)
输出结果为:
{'Fruit': ['Mango', 'Banana'], 'Flower': ['Rose', 'Lotus']}
{'India, USA': 'Countries', ('New Delhi', 'New York'): 'Capitals'}
示例 2
Python 不接受列表作为键,并会引发 TypeError
。
d1 = {["Mango","Banana"]:"Fruit", "Flower":["Rose", "Lotus"]}
print(d1)
这将引发 TypeError
:
Traceback (most recent call last):
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)
输出结果为:
{'Banana': 'Fruit', 'Rose': 'Flower', 'Lotus': 'Flower', 'Mango': 'Fruit'}
{'Fruit': 'Mango', 'Flower': 'Lotus'}
创建字典
可以通过在花括号 {} 内放置一个由逗号分隔的键值对序列来创建字典,其中冒号(:)分隔每个键及其关联值。或者,也可以使用 dict()
函数。
示例
下面的例子演示了如何使用花括号和 dict()
函数创建一个名为 student_info
的字典:
sports_player = {
"Name": "Sachin Tendulkar",
"Age": 48,
"Sport": "Cricket"
}
print("使用花括号创建的字典:", sports_player)
student_info = dict(name="Alice", age=21, major="Computer Science")
print("使用 dict() 创建的字典:", student_info)
输出结果为:
使用花括号创建的字典: {'Name': 'Sachin Tendulkar', 'Age': 48, 'Sport': 'Cricket'}
使用 dict() 创建的字典: {'name': 'Alice', 'age': 21, 'major': 'Computer Science'}
访问字典项
可以使用方括号 []
或 get()
方法来访问与特定键相关联的值:
student_info = {
"name": "Alice",
"age": 21,
"major": "Computer Science"
}
name = student_info["name"]
print("姓名:", name)
age = student_info.get("age")
print("年龄:", age)
得到的输出结果为:
姓名: Alice
年龄: 21
修改字典项
可以修改特定键关联的值或添加新的键值对:
student_info = {
"name": "Alice",
"age": 21,
"major": "Computer Science"
}
student_info["age"] = 22
student_info["graduation_year"] = 2023
print("修改后的字典:", student_info)
输出结果为:
修改后的字典: {'name': 'Alice', 'age': 22, 'major': 'Computer Science', 'graduation_year': 2023}
移除字典项
可以使用 del
语句、pop()
方法或 popitem()
方法来移除项:
student_info = {
"name": "Alice",
"age": 22,
"major": "Computer Science",
"graduation_year": 2023
}
del student_info["major"]
graduation_year = student_info.pop("graduation_year")
print(student_info)
得到的输出结果为:
{'name': 'Alice', 'age': 22}
遍历字典
可以使用循环遍历字典中的键、值或键值对:
student_info = {
"name": "Alice",
"age": 22,
"major": "Computer Science",
"graduation_year": 2023
}
for key in student_info:
print("键:", key, student_info[key])
for value in student_info.values():
print("值:", value)
for key, value in student_info.items():
print("键:值:", key, value)
执行上述代码后,我们得到的输出结果为:
键: name Alice
键: age 22
键: major Computer Science
键: graduation_year 2023
值: Alice
值: 22
值: Computer Science
值: 2023
键:值: name Alice
键:值: age 22
键:值: major Computer Science
键:值: graduation_year 2023
字典键的属性
字典的值没有限制。它们可以是任意的 Python 对象,无论是标准对象还是用户定义的对象。然而,对于键来说则不是这样。
关于字典键有两个重要的点需要注意:
-
允许多个条目共享同一键是不允许的。也就是说不允许重复的键。当赋值时遇到重复键,最后的赋值将获胜。例如:
dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'}
print("dict['Name']: ", dict['Name'])
执行上述代码,产生的结果为:
dict['Name']: Manni
-
键必须是不可变的。这意味着你可以使用字符串、数字或元组作为字典的键,但像
['key']
这样的东西是不允许的。下面是一个简单的例子:
dict = {['Name']: 'Zara', 'Age': 7}
print("dict['Name']: ", dict['Name'])
执行上述代码,产生的结果为:
Traceback (most recent call last):
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] |
提取/分配映射到键的值 |
print(d1['b']) 提取 4 |
d1['b'] = 'Z' |
分配新值给键 'b' |
d1['b'] = 'Z' 分配新值 |
`dict1 |
dict2` |
两个字典对象的并集,返回新对象 |
{'a': 2, 'b': 4, 'c': 30, 'a1': 20, 'b1': 40, 'c1': 60} |
|
|
`dict1 |
=dict2` |
增强字典并集运算符 |
{'a': 2, 'b': 4, 'c': 30, 'a1': 20, 'b1': 40, 'c1': 60} |
|
|
Python 字典方法
Python 包含以下字典方法:
序号 |
方法 |
描述 |
1 |
dict.clear() |
移除字典 dict 中的所有元素 |
2 |
dict.copy() |
返回字典 dict 的浅拷贝 |
3 |
dict.fromkeys() |
创建一个新的字典,键来自 seq 并设置值为 value |
4 |
dict.get(key, default=None) |
对于键 key ,如果不在字典中则返回默认值 default |
5 |
dict.has_key(key) |
如果键 key 在字典 dict 中则返回 True,否则返回 False(注:此方法已弃用,请使用 key in dict 替代) |
6 |
dict.items() |
返回字典 dict 的 (key, value) 对的列表 |
7 |
dict.keys() |
返回字典 dict 的键的列表 |
8 |
dict.setdefault(key, default=None) |
类似于 get() ,但如果没有 key 则会在字典中设置 dict[key]=default |
9 |
dict.update(dict2) |
将字典 dict2 的键值对加入到 dict 中 |
10 |
dict.values() |
返回字典 dict 的值的列表 |
内置函数与字典
以下是可以在字典上使用的内置函数:
序号 |
函数 |
描述 |
1 |
len(dict) |
返回字典的长度,即字典中的项数 |
2 |
str(dict) |
产生字典的可打印字符串表示形式 |
3 |
type(variable) |
返回变量的类型;如果是字典,则返回字典类型 |