Введение в python: первое знакомство со словарями

Python
Введение в python: первое знакомство со словарями

Общественный номер: 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 男