python进阶系列-03 字典

102 阅读4分钟

字典dict,编程大杀器,掌握之,佛挡杀佛 魔来斩魔!

字典是一个无序可变和索引集合。 一个字典由多个键值对组成。 每个键值对将(key)映射到其关联的值(value)。 字典是用大括号{}来声明。 每个 key 和它的 value 之间用冒号 (:) 分隔,item之间用冒号分隔逗号:。如下:

my_dict = {
    "name": "Max",
    "age": 28,
    "city": "New York"
}

创建字典

使用大括号{}创建字典,或者使用内建的 dict() 函数。

代码:

my_dict = {"name": "Max", "age": 28, "city": "New York"}
print(my_dict)

# 或者使用 dict 函数,注意:不需要引号
my_dict_2 = dict(name="Lisa", age=27, city="Boston")
print(my_dict_2)

结果:

{'name': 'Max', 'age': 28, 'city': 'New York'}
{'name': 'Lisa', 'age': 27, 'city': 'Boston'}

访问字典

代码:

my_dict = {"name": "Max", "age": 28, "city": "New York"}
name_in_dict = my_dict["name"]
print(name_in_dict)

# 如果 key 不存在,会抛出 KeyError
# print(my_dict["lastname"])

结果:

Max

注意: 如果 key 不存在,会抛出 KeyError

增加或者修改字典

只需要简单地添加或者访问一个 key 并为它赋值。

代码:

my_dict = {"name": "Max", "age": 28, "city": "New York"}
# 增加一个新的 key
my_dict["email"] = "max@xyz.com"
print(my_dict)

# 或者覆盖已经存在的 key
my_dict["email"] = "coolmax@xyz.com"
print(my_dict)

结果:

{'name': 'Max', 'age': 28, 'city': 'New York', 'email': '
{'name': 'Max', 'age': 28, 'city': 'New York', 'email': 'max@xyz.com'}
{'name': 'Max', 'age': 28, 'city': 'New York', 'email': 'coolmax@xyz.com'}

删除字典元素

删除字典有两种方法:

  • del 删除
  • dict.pppitem() 方法,但python3.6之后已经弃用

代码:

my_dict = {"name": "Max", "age": 28, "city": "New York"}
# 删除一个 key-value pair
del my_dict["email"]
# 这会返回 value 并且删除 key-value pair
print("popped value:", my_dict.pop("age"))
# 返回并且删除最后插入的 key-value pair
# 注意python3.6之后,popitem()方法已经被弃用
print("popped item:", my_dict.popitem())
print(my_dict)
# clear() 方法会删除所有 key-value pairs

结果:

popped value: 28
popped item: ('city', 'New York')
{'name': 'Max'}

判断 key 是否存在

代码:

my_dict = {"name": "Max", "age": 28, "city": "New York"}
# 使用 if .. in ..
if "name" in my_dict:
    print(my_dict["name"])

# 使用 try except
try:
    print(my_dict["firstname"])
except KeyError:
    print("No key found")  

结果:

Max
No key found

循环遍历字典

字典也可以类似列表list进行for循环遍历!

代码:

my_dict = {"name": "Max", "age": 28, "city": "New York"}
for key in my_dict:
    print(key, my_dict[key])
# keys
for key in my_dict.keys():
    print(key)
# values
for value in my_dict.values():
    print(value)
# items
for key, value in my_dict.items():
    print(key, value)

结果:

name Max
age 28
city New York
name
age
city
Max
28
New York
name Max
age 28
city New York

复制字典

普通的引用性复制,要小心!

代码:

dict_org = {"name": "Max", "age": 28, "city": "New York"}
# 这只是复制了 dict 的引用,所以要小心!
dict_copy = dict_org
# 修改的复制也会影响原来的
dict_copy["name"] = "Lisa"
print(dict_copy)
print(dict_org)

# 用 copy() 方法,或者用 dict(x) 方法来实际地复制字典
dict_org = {"name": "Max", "age": 28, "city": "New York"}
dict_copy = dict_org.copy()
# dict_copy = dict(dict_org)
# 修改的复制不会影响原来的
dict_copy["name"] = "Lisa"
print(dict_copy)
print(dict_org)

结果:

{'name': 'Lisa', 'age': 28, 'city': 'New York'}
{'name': 'Lisa', 'age': 28, 'city': 'New York'}
{'name': 'Lisa', 'age': 28, 'city': 'New York'}
{'name': 'Max', 'age': 28, 'city': 'New York'}

合并两个字典

dict.update()方法可以快速合并字典。

代码:

# 用 update() 方法来合并两个字典
my_dict = {"name": "Max", "age": 28, "email": "max@xyz.com"}
my_dict_2 = dict(name="Lisa", age=27, city="Boston")

my_dict.update(my_dict_2)
print(my_dict)

结果:

{'name': 'Lisa', 'age': 27, 'email': 'max@xyz.com', 'city': 'Boston'}

key的类型

任何不可变类型,如字符串或数字都可以用作键。如果元组仅包含不可变元素,也可以使用它。

注意: 元组本身不可变,但其可以包含可变的元素,如列表。所以必须是元组仅包含不可变元素 时可以用作字典key。

# 用数字作为 key,但是要小心!
my_dict = {3: 9, 6: 36, 9: 81}
# 不要混淆数字和索引,如 my_dict[0] 不可能
print(my_dict[3], my_dict[6], my_dict[9])

# 用不可变元素(例如数字、字符串)作为 key
my_tuple = (8, 7)
my_dict = {my_tuple: 15}
print(my_dict[my_tuple])

# print(my_dict[8, 7])
# 列表不可能作为 key,因为它不是不可变的
# 这将抛出一个错误:
# my_list = [8, 7]
# my_dict = {my_list: 15}

结果:

9 36 81
15

嵌套字典

字典嵌套:值也可以是容器类型(例如列表、元组、字典)。

代码:

my_dict_1 = {"name": "Max", "age": 28}
my_dict_2 = {"name": "Alex", "age": 25}
nested_dict = {"dictA": my_dict_1, "dictB": my_dict_2}
print(nested_dict)

结果:

{'dictA': {'name': 'Max', 'age': 28}, 'dictB': {'name': 'Alex', 'age': 25}}

小节

本文简要分享了字典dict的主要特性,希望对你有所帮助。

欢迎大家点赞、收藏,支持!

pythontip 出品,Happy Coding!

公众号: 夸克编程