Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер
Всем привет, меня зовут Питер~
Ранее я представил три типа данных Python: строки, списки и кортежи, которые являются упорядоченными типами данных.
В этой статье представлен неупорядоченный тип данных Python:Словарь. Словари в основном используются для хранения данных с отношениями отображения.
Каталог статей
Возможности словаря
Словарь — это тип данных, который часто используется в Python. Словарь может хранить данные любого типа, и сохраненные данные также могут быть изменены, подобно списку. Каждый базовый элемент словаря содержит две части: ключевой ключ и значение, соответствующее этому ключу.
- Используйте двоеточие для разделения ключей и значений (используемые символы на английском языке)
- Каждая пара элементов отделяется запятой
- Все данные в фигурных скобках
Чтобы проиллюстрировать на примере:{"name":"小明","age":22,"sex":"男"}
В словаре ключи разные, повторяемые и являются неизменяемыми типами данных, а значения могут быть любого типа данных. Кортежи неизменяемы, поэтому их можно использовать в качестве ключей словаря. Списки изменяемы и не могут использоваться в качестве ключей словаря.Ключи поддерживают только неизменяемые типы данных
Словари не упорядочены, поэтому каждый раз при печати порядок может меняться.
создание словаря
Существует два способа создания словаря:
- использовать фигурные скобки
{}
Создайте - Создано с помощью функции dict
При использовании фигурных скобок {} для создания словаря фигурные скобки должны содержать несколько пар ключ-значение, а ключ и значение должны быть разделены английским двоеточием; несколько пар ключ-значение должны быть разделены английской запятой.
Создать пустой словарь
dic1 = dict() # 空字典
dic1
{}
type(dic1) # 查看类型
dict
dic2 = {} # 花括号来创建
dic2
{}
type(dic2)
dict
Фигурные скобки: только одна пара ключ-значение
dic3 = {"name":"小明"}
dic3
{'name': '小明'}
type(dic3)
dict
Фигурные скобки: несколько пар ключ-значение
Ключ должен быть строкового типа, а значение может быть любым типом данных, например: строки, числа, списки и т. д.
dic4 = {"name":"小明", # 字符串
"age":25, # 数值
89:111,
"sex":"男", # 字符串
"score":[100,98,99] # 列表
}
dic4
{'name': '小明', 'age': 25, 89: 111, 'sex': '男', 'score': [100, 98, 99]}
type(dic4)
dict
Функция dict: несколько пар ключ-значение
# 列表中存放元组
data1 = [("name","小明"),
("age",25),
("score",[100,99,98])
]
dic5 = dict(data1)
dic5
{'name': '小明', 'age': 25, 'score': [100, 99, 98]}
# 列表中嵌套列表
data2 = [["name","小明"],
["age",25],
["score",[100,99,98]]
]
dic6 = dict(data2)
dic6
{'name': '小明', 'age': 25, 'score': [100, 99, 98]}
функция dict: создается путем указания аргументов ключевого слова
Вы также можете создать словарь, указав аргументы ключевого слова для dict, и в этом случае ключ словаря не допускает выражений.
dic7 = dict(name="小明",age=25,sex="男") # name不要放在引号中
dic7
{'name': '小明', 'age': 25, 'sex': '男'}
type(dic7)
dict
функция dict: создана функцией zip
data3 = zip(("name","age","sex"),("小明",25,"男"))
data3
<zip at 0x1122e2870>
dict8 = dict(data3)
dict8
{'name': '小明', 'age': 25, 'sex': '男'}
словарные операции
Ключ — это ключевые данные в словаре, а доступ ко всем значениям осуществляется через свои собственные ключи, поэтому мы должны освоить каждую операцию на основе ключа.
- Доступ к значению по ключу
- Добавить пару ключ-значение по ключу
- Удалить пару ключ-значение по ключу
- Изменить пару ключ-значение по ключу
- Проверить, существует ли указанная пара ключ-значение
Операция 1: Доступ к значению по ключу
Следующий код демонстрирует, как получить доступ к соответствующему значению по ключу
dic5
{'name': '小明', 'age': 25, 'score': [100, 99, 98]}
dic5["name"]
'小明'
dic5["score"]
[100, 99, 98]
Если ключ не существует, это вызовет ошибку:
dic5["sex"]
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-18-8c2513616156> in <module>
----> 1 dic5["sex"]
KeyError: 'sex'
Операция 2. Добавьте пару "ключ-значение"
dic5 # 前
{'name': '小明', 'age': 25, 'score': [100, 99, 98]}
dic5["address"] = "广东省深圳市" # 增加键值对
dic5 # 后
{'name': '小明', 'age': 25, 'score': [100, 99, 98], 'address': '广东省深圳市'}
Добавьте новую пару ключ-значение
dic5["birth"] = "1993-08-01"
dic5
{'name': '小明',
'age': 25,
'score': [100, 99, 98],
'address': '广东省深圳市',
'birth': '1993-08-01'}
Действие 3. Удалите пару "ключ-значение"
dic6
{'name': '小明', 'age': 25, 'score': [100, 99, 98]}
# 1、删除
del dic6["name"]
dic6
{'age': 25, 'score': [100, 99, 98]}
Мы обнаружили, что имя пары ключ-значение отсутствует и было удалено.
del dic6["score"]
dic6
{'age': 25}
После повторного удаления пара ключ-значение также исчезла.
Действие 4. Измените пару "ключ-значение"
Изменение пары ключ-значение в основном связано с изменением значения в ключе; новое присвоенное значение перезапишет исходное значение.
dic5
{'name': '小明',
'age': 25,
'score': [100, 99, 98],
'address': '广东省深圳市',
'birth': '1993-08-01'}
# 1、修改name
dic5["name"] = "小红"
dic5
{'name': '小红',
'age': 25,
'score': [100, 99, 98],
'address': '广东省深圳市',
'birth': '1993-08-01'}
dic5["name"] + "来自" + dic5["address"]
'小红来自广东省深圳市'
# 2、修改日期
dic5["birth"] = "1993-08-08"
dic5
{'name': '小红',
'age': 25,
'score': [100, 99, 98],
'address': '广东省深圳市',
'birth': '1993-08-08'}
Операция 5: определить, существует ли пара ключ-значение
Если вы хотите определить, содержит ли словарь указанный ключ, вы можете использовать оператор in или not in. Следует отметить, что эти два оператора оцениваются на основе ключа словаря.
dic5
{'name': '小红',
'age': 25,
'score': [100, 99, 98],
'address': '广东省深圳市',
'birth': '1993-08-08'}
"sex" in dic5
False
"sex" not in dic5
True
- Вверху: род пол отсутствует в словаре dic5, результат False:
- Внизу: имя имя находится в словаре dic5, результат True.
"name" in dic5
True
Сводка операций со словарем
В приведенном выше примере мы сравниваем индекс списка и словаря:
- Ключевой ключ — это ключ в словаре, который эквивалентен индексу словаря, но этот индекс не обязательно имеет целочисленный тип.
- Ключевым значением словаря является любой неизменяемый тип данных: числовой, строковый, кортеж и т. д.
- Индекс в списке всегда начинается с 0 и непрерывно увеличивается, но если все ключи в словаре целочисленные, они могут не начинаться с 0 и не быть непрерывными.
- Присваивания несуществующим индексам не допускаются в списках; словари позволяют присваивать несуществующим ключам, что похоже на добавление пары ключ-значение.
метод словаря
Словари в Python представлены классом dict, вы можете использовать dir(dict), чтобы увидеть, какие методы содержит класс.
Просмотр методов словаря
print(dir(dict)) # 查看字典对的方法
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
Метод словаря 1: очистить()
Используется для очистки всех пар ключ-значение в словаре.После выполнения метода clear() для словаря словарь станет пустым.
dic7 # 执行前
{'name': '小明', 'age': 25, 'sex': '男'}
dic7.clear() # 执行
dic7 # 执行后变成空字典
{}
Метод словаря 2: get()
Метод заключается в том, чтобы получить значение через ключ. Словарь выдает ошибку, когда мы используем синтаксис квадратных скобок для доступа к несуществующему ключу. Но если вы используете метод get, вы не сообщите об ошибке и вернете None, см. конкретный пример:
dic5
{'name': '小红',
'age': 25,
'score': [100, 99, 98],
'address': '广东省深圳市',
'birth': '1993-08-08'}
print(dic5.get("name")) # 访问存在的键
小红
print(dic5.get("birth"))
1993-08-08
Следующий половой ключ не существует, но он не сообщает об ошибке, а выводит None:
print(dic5.get("sex"))
None
Использование фигурных скобок дает ошибку:
dic5["sex"]
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-43-8c2513616156> in <module>
----> 1 dic5["sex"]
KeyError: 'sex'
Метод словаря 3: обновить
- Если ключ существует, он используется для обновления значения пары ключ-значение в словаре;
- Если пары ключ-значение не существует, она будет добавлена в словарь:
dic5
{'name': '小红',
'age': 25,
'score': [100, 99, 98],
'address': '广东省深圳市',
'birth': '1993-08-08'}
dic5.update({"name":"小明"}) # 更新现有key
dic5
{'name': '小明',
'age': 25,
'score': [100, 99, 98],
'address': '广东省深圳市',
'birth': '1993-08-08'}
dic5.update({"sex":"男"}) # 键不存在,就是更新
dic5
{'name': '小明',
'age': 25,
'score': [100, 99, 98],
'address': '广东省深圳市',
'birth': '1993-08-08',
'sex': '男'}
Метод словаря 4: pop()
Используется для получения значения, соответствующего указанному ключу, и удаления всей пары ключ-значение.
dic5
{'name': '小明',
'age': 25,
'score': [100, 99, 98],
'address': '广东省深圳市',
'birth': '1993-08-08',
'sex': '男'}
dic5.pop("sex")
'男'
Глядя на приведенный ниже словарь, мы видим, что пара ключ-значение пола была удалена:
dic5
{'name': '小明',
'age': 25,
'score': [100, 99, 98],
'address': '广东省深圳市',
'birth': '1993-08-08'}
Метод словаря 5: popitem()
Этот метод используется для случайного извлечения словаря из пар ключ-значение. На самом деле это не случайно.
Метод pop в списках Python всегда извлекает последний элемент. Метод словаря popitem() также выводит последнюю пару ключ-значение.
dic5
{'name': '小明',
'age': 25,
'score': [100, 99, 98],
'address': '广东省深圳市',
'birth': '1993-08-08'}
dic5.popitem() # 最后一个
('birth', '1993-08-08')
dic4
{'name': '小明', 'age': 25, 89: 111, 'sex': '男', 'score': [100, 98, 99]}
k,v = dic4.popitem() # 通过序列解包分别赋值给两个变量
print(k)
print(v)
score
[100, 98, 99]
Метод словаря 6: setdefault()
Метод setdefault() также используется для получения значения соответствующего значения в соответствии с ключом.
- Если ключ, который нужно получить, не существует в словаре, вы можете установить значение по умолчанию для ключа, а затем вернуть значение, соответствующее ключу.
- Если ключ существует в словаре, напрямую вернуть значение, соответствующее ключу
dic5
{'name': '小明', 'age': 25, 'score': [100, 99, 98], 'address': '广东省深圳市'}
dic5.setdefault("sex","男") # dic5中不存在sex的键
'男'
dic5.setdefault("name","小红") # name键存在,则返回字典中的值
'小明'
Метод словаря 7: fromkeys()
Этот метод заключается в создании словаря с несколькими заданными ключами, и значения, соответствующие этим ключам, по умолчанию равны None; вы также можете передать дополнительный параметр в качестве значения по умолчанию.
dic8 = dict.fromkeys(["小红","小明"]) # 列表形式
dic8
{'小红': None, '小明': None}
Приведенный выше результат означает: значение метода по умолчанию — None.
dict.fromkeys(("小红","小明")) # 元组形式
{'小红': None, '小明': None}
Вы также можете передать значение по умолчанию:
dict.fromkeys(["小明","小周"],22)
{'小明': 22, '小周': 22}
Словарь 3 волшебное оружие
Словарная магия 1: ключи()
Все клавиши, используемые для просмотра словаря
dic5
{'name': '小明',
'age': 25,
'score': [100, 99, 98],
'address': '广东省深圳市',
'sex': '男'}
dic5.keys()
dict_keys(['name', 'age', 'score', 'address', 'sex'])
for key in dic5.keys(): # 循环遍历每个key
print(key)
name
age
score
address
sex
С помощью следующего кода мы можем обнаружить, что при обходе словаря по умолчанию используется ключ словаря:
for i in dic5:
print(i)
name
age
score
address
sex
Магия словаря 2: значения ()
используется для возврата всех значений в словаре
dic5.values()
dict_values(['小明', 25, [100, 99, 98], '广东省深圳市', '男'])
list(dic5.values())
['小明', 25, [100, 99, 98], '广东省深圳市', '男']
Словарь магии 3: элементы ()
Используется для возврата всех пар ключ-значение
dic5.items()
dict_items([('name', '小明'), ('age', 25), ('score', [100, 99, 98]), ('address', '广东省深圳市'), ('sex', '男')])
for item in dic5.items():
print(item)
('name', '小明')
('age', 25)
('score', [100, 99, 98])
('address', '广东省深圳市')
('sex', '男')
Поскольку мы можем напрямую выводить пары ключ-значение через items(), мы можем напрямую получать ключи и значения.
for k,v in dic5.items():
print(k,v)
name 小明
age 25
score [100, 99, 98]
address 广东省深圳市
sex 男