Словарь содержит пары ключ - значение (их порядок несущественен). Это один из наиболее полезных и часто используемых типов данных в питоне.
d={'one':1,'two':2,'three':3}
d
Можно узнать значение, соответствующее некоторому ключу. Словари реализованы как хэш-таблицы, так что поиск даже в больших словарях очень эффективен. В языках низкого уровня (например, C) для построения хэш-таблиц требуется использовать внешние библиотеки и писать заметное количество кода. В скриптовых языках (perl, python, php) они уже встроены в язык, и использовать их очень легко.
d['two']
d['four']
Можно проверить, есть ли в словаре данный ключ.
'one' in d, 'four' in d
Можно присваивать значения как имеющимся ключам, так и отсутствующим (они добавятся к словарю).
d['one']=-1
d
d['four']=4
d
Длина - число ключей в словаре.
len(d)
Можно удалит ключ из словаря.
del d['two']
d
Метод get
, если он будет вызван с отсутствующим ключом, не приводит к ошибке, а возвращает специальный объект None
. Он используется всегда, когда необходимо указать, что объект отсутствует (в какой-то мере он аналогичен null
в C). Если передать методу get
второй аргумент - значение по умолчанию, то будет возвращаться это значение, а не None
.
d.get('one'),d.get('five')
type(None)
d.get('one',0),d.get('five',0)
Словари обычно строят последовательно: начинают с пустого словаря, а затем добавляют ключи со значениями.
d={}
d
d['zero']=0
d
d['one']=1
d
А это генератор словаря (dictionary comprehension).
d={i:i**2 for i in range(5)}
d
Ключами могут быть любые неизменяемые объекты, например, целые числа, строки, кортежи.
d={}
d[0,0]=1
d[0,1]=0
d[1,0]=0
d[1,1]=-1
d
d[0,0]+d[1,1]
Словари, подобно спискам, можно использовать в for
циклах. Перебираются имеющиеся в словаре ключи (в каком-то непредсказуемом порядке).
d={'one':1,'two':2,'three':3}
for x in d:
print(x,' ',d[x])
Метод keys
возвращает список ключей, метод values
- список соответствующих значений (в том же порядке), а метод items
- список пар (ключ,значение). Точнее говоря, это не списки, а некоторые объекты, которые можно использовать в for
циклах или превратить в списки функцией list
. Если хочется написать цикл по упорядоченному списку ключей, то можно использовать sorted(d.keys))
.
d.keys(),d.values(),d.items()
for x in sorted(d.keys()):
print(x,' ',d[x])
for x,y in d.items():
print(x,' ',y)
del x,y
Что есть истина? И что есть ложь? Подойдём к этому философскому вопросу экспериментально.
bool(False),bool(True)
bool(None)
bool(0),bool(123)
bool(''),bool(' ')
bool([]),bool([0])
bool(set()),bool({0})
bool({}),bool({0:0})
На варажения, стоящие в булевых позициях (после if
, elif
и while
), неявно напускается функция bool
. Некоторые объекты интерпретируются как False
: число 0, пустая строка, пустой список, пустое множество, пустой словарь, None
и некоторые другие. Все остальные объекты интерпретируются как True
. В операторах if
или while
очень часто используется список, словарь или что-нибудь подобное, что означает делай что-то если этот список (словарь и т.д.) не пуст.
Заметим, что число с плавающей точкой 0.0 тоже интерпретируется как False
. Это использовать категорически не рекомендуется: вычисления с плавающей точкой всегда приближённые, и неизвестно, получите Вы 0.0 или 1.234E-12
.
Лучше напишите if abs(x)<epsilon:
.