×
Traktatov.net » Программирование на Python » Читать онлайн
Страница 32 из 625 Настройки

>>> bob = dict(name='Bob Smith', age=42, pay=30000, job='dev')

>>> sue = dict(name='Sue Jones', age=45, pay=40000, job='hdw')

>>> bob

{‘pay’: 30000, ‘job’: ‘dev’, ‘age’: 42, ‘name’: ‘Bob Smith’}

>>> sue

{‘pay’: 40000, ‘job’: ‘hdw’, ‘age’: 45, ‘name’: ‘Sue Jones’}

заполнением словаря поле за полем (напомню, что для ключей словаря не предусматривается какой-то определенный порядок следования):

>>> sue = {}

>>> sue[‘name'] = ‘Sue Jones'

>>> sue[‘age'] = 45 >>> sue[‘pay'] = 40000 >>> sue[‘job'] = ‘hdw'

>>> sue

{‘job’: ‘hdw’, ‘pay’: 40000, ‘age’: 45, ‘name’: ‘Sue Jones’}

объединением двух списков, содержащих имена и значения:

>>> names = [‘name', ‘age', ‘pay', ‘job']

>>> values = [‘Sue Jones', 45, 40000, ‘hdw']

>>> list(zip(names, values))

[(‘name’, ‘Sue Jones’), (‘age’, 45), (‘pay’, 40000), (‘job’, ‘hdw’)]

>>> sue = dict(zip(names, values))

>>> sue

{‘job’: ‘hdw’, ‘pay’: 40000, ‘age’: 45, ‘name’: ‘Sue Jones’}

Словари можно даже создавать из последовательностей ключей и необязательного начального значения для всех ключей (этот способ удобно использовать для инициализации пустых словарей):

>>> fields = (‘name', ‘age', ‘job', ‘pay')

>>> record = dict.fromkeys(fields, ‘?')

>>> record

{‘job’: ‘?’, ‘pay’: ‘?’, ‘age’: ‘?’, ‘name’: ‘?’}

Списки словарей

Независимо от способа создания словарей, нам все еще необходимо собрать словари-записи в базу данных. Здесь также можно использовать список, при условии, что нам не требуется обеспечить доступ по ключу на верхнем уровне:

>>> bob

{‘pay’: 30000, ‘job’: ‘dev’, ‘age’: 42, ‘name’: ‘Bob Smith’}

>>> sue

{‘job’: ‘hdw’, ‘pay’: 40000, ‘age’: 45, ‘name’: ‘Sue Jones’}

>>> people = [bob, sue]    # ссылки в списке

>>> for person in people:

print(person[‘name'], person[‘pay'], sep=', ‘) # все имена, оклады

Bob Smith, 30000 Sue Jones, 40000

>>> for person in people:

if person[‘name'] == ‘Sue Jones':    # оклад Сью

print(person[‘pay'])

40000

Здесь точно так же используются инструменты итераций, но вместо таинственных числовых индексов используются ключи (в терминах баз данных генератор списков и функция map в следующем примере возвращают проекцию базы данных по полю «name»):

>>> names = [person[‘name'] for person in people] # выбирает имена >>> names

[‘Bob Smith’, ‘Sue Jones’]

>>> list(map((lambda x: x[‘name']), people))    # то же самое

[‘Bob Smith’, ‘Sue Jones’]

>>> sum(person[‘pay'] for person in people)    # сумма всех окладов

70000

Интересно, что такие инструменты, как генераторы списков и выражения-генераторы, способны по своему удобству приблизиться к запросам в языке SQL, с тем отличием, что они манипулируют объектами в памяти:

>>> [rec[‘name'] for rec in people if rec[‘age'] >= 45]    # SQL-подобный

[‘Sue Jones’]    # запрос

>>> [(rec[‘age'] ** 2 if rec[‘age'] >= 45 else rec[‘age']) for rec in people]

[42, 2025] >>> G = (rec[‘name'] for rec in people if rec[‘age'] >= 45)

>>> next(G)

‘Sue Jones’

>>> G = ((rec[‘age'] ** 2 if rec[‘age'] >= 45 else rec[‘age']) for rec in people)

>>> G.__next__()

42

А так как словари являются обычными объектами, к этим записям можно также обращаться с использованием привычного синтаксиса: