Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.
Привет всем, яодна чаша в неделю, передняя часть, которая не хочет быть пьяной (завернутой). Если написанной статье посчастливилось получить вашу благосклонность, мне очень повезло~
концепция словаря
Тип данных словаря в Python очень похож на словарь в действительности, он организует данные вместе в виде пар ключ-значение (комбинаций ключей и значений), и соответствующее значение можно найти и оперировать с помощью ключа. Подобно тому, как каждое слово (ключ) в словаре имеет соответствующую интерпретацию (значение), каждое слово и его интерпретация вместе представляют собой статью в словаре, а словарь обычно содержит много таких статей.
Создание и использование словарей
Чтобы создать словарь в Python, используйте{}
Литеральный синтаксис, который является той же нотацией, которая используется для создания коллекции. но словарь{}
Элементы представлены в виде пар ключ-значение, и каждый элемент представлен:
состоит из двух отдельных значений,:
ключ впереди:
с последующим значением, с запятой между каждой парой,
Формат синтаксиса сегментации, конкретный формат синтаксиса выглядит следующим образом:
dict = {key1 : value1, key2 : value2 }
создать словарь
# 创建字典
dict1 = {"姓名": "甜甜"}
print(type(dict1), dict1) # <class 'dict'> {'姓名': '甜甜'}
dict2 = {
"姓名": "甜甜",
"性别": "女",
"年龄": "19"
}
print(dict2) # {'姓名': '甜甜', '性别': '女', '年龄': '19'}
использоватьdict()
Или порождающая грамматика словаря для создания словаря, пример кода↓
# 使用dict 创建对象,键不可以加""引号
dict1 = dict(姓名="甜甜", 性别="女", 年龄="19")
print(type(dict1), dict1) # <class 'dict'> {'姓名': '甜甜', '性别': '女', '年龄': '19'}
list1 = ["姓名", "性别", "年龄"]
list2 = ["甜甜", "女", "19"]
# zip()函数将对象中对应的元素打包成一个个元组,返回由这些元组组成的对象
dict2 = dict(zip(list1, list2))
print(dict2) # {'姓名': '甜甜', '性别': '女', '年龄': '19'}
# 使用生成列创建字典
dict3 = {x: x ** 3 for x in range(6)}
print(dict3) # {0: 0, 1: 1, 2: 8, 3: 27, 4: 64, 5: 125}
можно использоватьlen(dict)
Получить количество элементов словаря, то есть общее количество ключей
циклы for также действительны только для ключей
dict1 = {'姓名': '甜甜', '性别': '女', '年龄': '19'}
print(len(dict1)) # 3
for ch in dict1:
print(ch)
'''
姓名
性别
年龄
'''
словарные операции
Для словарей, операций с членами и индексации (Индекс словаря — это ключ в паре ключ-значение.) операция особенно важна, первая может определить, есть ли указанный ключ в словаре или нет, а вторая может получить соответствующее значение, изменить или добавить его. Ключи в словаре должны быть неизменяемых типов, таких как целые числа (int
), числа с плавающей запятой (float
), нить (str
), кортежи (tuple
) и другие типы значений. Сами словари также являются изменяемыми типами.
образец кода
dict1 = {'姓名': '甜甜', '性别': '女', '年龄': '19'}
# 成员运算
print("姓名" in dict1, "性别" not in dict1) # True False
# 先判断在修改
if "姓名" in dict1:
dict1["姓名"] = '王甜甜'
print(dict1) # {'姓名': '王甜甜', '性别': '女', '年龄': '19'}
# 通过索引为dict1 增加数据
dict1["爱好"] = "旅游"
print("爱好" in dict1) # True
# 对字典的键进行循环并通索引运算获取键对应的值
for key in dict1:
print(f'{key}: {dict1[key]}')
'''
姓名: 王甜甜
性别: 女
年龄: 19
爱好: 旅游
'''
Уведомление, когда значение в словаре получено через операцию индекса, если указанный ключ отсутствует в словаре, он поднимет
KeyError
аномальный
метод словаря
Методы словаря — это связанные операции над парами ключ-значение.
# 字典的嵌套
students = {
10001: {"name": "小明", "sex": "男", "age": 18},
10002: {"name": "小红", "sex": "女", "age": 16},
10003: {"name": "小白", "sex": "女", "age": 19},
10004: {"name": "小周", "sex": "男", "age": 20}
}
# 使用get方法通过键获取对应的值,如果取不到是返回的默认值(默认为None)
print(students.get(10002)) # {'name': '小红', 'sex': '女', 'age': 16}
print(students.get(10005)) # None
print(students.get(10005, "没有这个学生")) # 没有这个学生
# 获取字典中所有的键
print(students.keys()) # dict_keys([10001, 10002, 10003, 10004])
# 获取字典中所有的值
print(students.values()) # dict_values([{...}, {...}, {...}, {...}])
# 获取字典中所有的键值对
# dict_items([(10001, {...}), (10002, {....}), (10003, {...}), (10004, {...})])
print(students.items())
# 对字典中所有的键值对进行循环遍历
for key, value in students.items():
print(key, '--->', value)
# 使用pop方法通过键删除对应的键值对并返回该值
stu1 = students.pop(10002)
print(stu1) # {'name': '小红', 'sex': '女', 'age': 16}
print(len(students)) # 3
# 如果删除的不在字典中,会引发KeyError异常
# stu2 = students.pop(10005) # KeyError: 10005
# 使用popitem方法删除字典中最后一组键值对并返回对应的二元组
# 如果字典中没有元素,调用该方法将引发KeyError异常
key, value = students.popitem()
print(key, value) # 10004 {'name': '小周', 'sex': '男', 'age': 20}
# setdefault可以更新字典中的键对应的值或向字典中存入新的键值对
# setdefault方法的第一个参数是键,第二个参数是键对应的值
# 如果这个键在字典中存在,更新这个键之后会返回原来与这个键对应的值
# 如果这个键在字典中不存在,方法将返回第二个参数的值,默认为None
result = students.setdefault(10005, {"name": "小绿", "sex": "女", "age": 18})
print(result) # {'name': '小绿', 'sex': '女', 'age': 18}
print(students) # {10001: {...}, (10003, {...}), 10005: {...}}
# 使用update更新字典元素,相同的键会用新值覆盖掉旧值,不同的键会添加到字典中
others = {
10005: {"name": "小南", "sex": "男", "age": 19},
10006: {"name": "小北", "sex": "男", "age": 19},
10007: {"name": "小冬", "sex": "男", "age": 19}
}
students.update(others)
# {10001: {...}, 10003: {...}, 10005: {...}, 10006: {...}, 10007: {...}}
print(students)