Эта серия статей посвящена часто используемой обработке данных в Python.List (список), tuple (кортеж), Dictionary (словарь), array (массив)-numpy, DataFrame-pandas, set (набор) и т. д.Подробно описаны характеристики и общие операции формы данных.
Сегодня начнем вторую статью из этой серии ---Python Data Series (2) — Словарь: «Большой пожиратель» Python.
Словарь: он идентифицируется с помощью "{}" и состоит из индекса (ключа) и соответствующего ему значения (значения), а значение ключа представляет собой пару "ключ-значение". Это самый гибкий встроенный тип структуры данных в Python, кроме списков. Подобно типам данных k-v в других языках.
Словарь имеет следующие характеристики
- Словарь — еще один изменяемыймодель контейнера, и может хранить любой тип объекта.
- Каждая пара "ключ-значение" (ключ=>значение) в словаре отделяется двоеточием (:), а каждая пара - запятой (,). Весь словарь заключен в фигурные скобки ({}). Формат выглядит следующим образом: d = {ключ1 : значение1, ключ2 : значение2 }
- Ключи должны быть уникальными, а значения — нет. Значения могут принимать любой тип данных, но ключи должны быть неизменяемыми, как строки, числа или кортежи.
- Элементы в словаре передаются черезkeyключ, а не по смещению.
- словарьбеспорядокКомбинация объектов, упорядоченная комбинация объектов в списке.
- Словари могут быть вложенными, то есть словари вложены в словари.многоуровневая вложенность.
Создать, изменить, добавить, очистить, удалить словарь
In [1]: dict={"class":"5","name":"莉莉","年龄":"12"}
In [2]: dict
Out[2]: {'class': '5', 'name': '莉莉', '年龄': '12'}
In [3]: dict["name"] # 取对应键的值
Out[3]: '莉莉'
In [4]: dict["class"]="6" # 给键赋予新值
In [5]: dict["年龄"]="7"
In [6]: dict
Out[6]: {'class': '6', 'name': '莉莉', '年龄': '7'}
In [7]: dict["年龄"]="13"
In [8]: dict
Out[8]: {'class': '6', 'name': '莉莉', '年龄': '13'}
In [9]: dict["father"]="wangxiao" # 给字典增加新的键值对
In [10]: dict
Out[10]: {'class': '6', 'father': 'wangxiao', 'name': '莉莉', '年龄': '13'}
In [11]: del dict["father"] # 删除字典内指定键值对
In [12]: dict
Out[12]: {'class': '6', 'name': '莉莉', '年龄': '13'}
In [13]: dict.clear() # 清空字典
In [14]: dict
Out[14]: {}
In [15]: del dict # 删除字典
In [16]: dict
Out[16]: dict
Другие распространенные операции со словарями
In [1]: dict={"class":"5","name":"莉莉","年龄":"12"}
In [2]: len(dict) # 计算字典元素个数,即键的总数
Out[2]: 3
In [3]: str(dict) # 将值转化为适于人阅读的形式,以可打印的字符串表示
Out[3]: "{'class': '5', '年龄': '12', 'name': '莉莉'}"
In [4]: dict
Out[4]: {'class': '5', 'name': '莉莉', '年龄': '12'}
# 这句是最常用的,几乎每每遇到字典,都这么用,牢记
In [5]: for key,value in dict.items(): # 遍历字典的键、值
...: print(key)
...: print(value)
...:
class
5
年龄
12
name
莉莉
In [6]: dict.get("class") # 获取对应键的值,和dict["class"]类似
Out[6]: '5'
In [7]: dict.has_key("class") # 判定字典内是否有该键值对
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-7-ac723f5f8be5> in <module>()
----> 1 dict.has_key("class")
AttributeError: 'dict' object has no attribute 'has_key'
In [8]: dict.__contains__("class") # Python 3.X 里不包含 has_key() 函数,被 __contains__(key) 替代
Out[8]: True
In [9]: dict.items() # 字典内内容
Out[9]: dict_items([('class', '5'), ('年龄', '12'), ('name', '莉莉')])
In [10]: dict.keys() # 取字典内的键
Out[10]: dict_keys(['class', '年龄', 'name'])
In [11]: dict2={"mother":"feifei"}
In [12]: dict.update(dict2) # 将另一个字典与该字典融合
In [13]: dict
Out[13]: {'class': '5', 'mother': 'feifei', 'name': '莉莉', '年龄': '12'}
In [14]: dict.values
Out[14]: <function dict.values>
In [15]: dict.values() # 取字典内的值
Out[15]: dict_values(['5', 'feifei', '12', '莉莉'])
In [16]: dict.pop("mother") # 删除字典内指定键值对,返回对应键的值
Out[16]: 'feifei'
In [17]: dict
Out[17]: {'class': '5', 'name': '莉莉', '年龄': '12'}
Сравнение словаря, из-за обновления версии python есть проблемы
In [1]: dict={"class":"5","name":"莉莉","年龄":"12"}
In [2]: dict1={"class":"5","name":"莉莉","年龄":"12"}
In [3]: cmp(dict,dict1) # 比较两个字典
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-3-3e150a9f899c> in <module>()
----> 1 cmp(dict,dict1)
NameError: name 'cmp' is not defined
# python 3.4.3 的版本中已经没有cmp函数,被operator模块代替,在交互模式下使用时,需要导入模块。
In [4]: import operator
In [5]: operator.eq(dict,dict1)
Out[5]: True
In [6]: dict1={"class":"5","name":"莉莉","年龄":"15"}
In [7]: operator.eq(dict,dict1)
Out[7]: False
In [8]:
Что касается использования и работы со словарями, то она точно не ограничивается тем, что здесь упомянуто, существуют также вложения, подобные многослойным словарям и так далее. Эта статья носит скорее справочный характер, и я надеюсь, что при использовании данных вы сможете представить себе контейнерную форму хранения данных, такую как словарь. Для более своевременных обновлений вы можете обратить внимание на мой CSDN: Цянь Дуодуо Сяньсен
предыдущий постСерия данных Python (1) — Список списка: «Кули» PythonЯ получил отзывы от многих мелких партнеров.Что касается копирования и глубокого копирования списка, содержание этой части представлено в нескольких формах данных, и часть копирования будет специально представлена в следующей статье.
К основным операциям словаря dict в этом выпуске, как правило, относятся наиболее часто используемые формы операций в повседневном обучении и работе. Надеюсь, что приведенная выше договоренность может быть полезна для вашего следующего исследования. Для большего количества операций на Python вы можете войти в официальный аккаунт:Сяобай резюме, щелкните "историческая информация» для более замечательных статей.
В следующей статье этой серии мы обсудимНеизменяемая последовательность -- кортеж (кортеж), который является более мощной формой данных, чем список.
прошлый обзор
- Основы сети знаний (1) - Что такое сеть знаний
- Основы Графа знаний (2) - Система выражения знаний Графа знаний
- Основы графа знаний (3) - Построение схемы
- Python: попрощаться с печатью? Отличный артефакт отладки --- pysnooper
- Теперь пришло время выполнять пакетные операции с файлами, давайте использовать нож! ! !
- Серия данных Python (1) — Список списка: «Кули» Python