text='ldap:alberthwang,eeid:67739|ldap:meng,eeid:107,building:CL5'
sample=[
dict(item.split(':') for item in part.split(','))
for part in text.split('|')]
print(sample)
# [{'eeid': '67739', 'ldap': 'alberthwang'}, {'building': 'CL5', 'eeid': '107', 'ldap': 'meng'}]
print(sample[1]['building'])
# CL5
- Понимание списка - очень удобный способ построения
списки, подобные этому.
- dict может быть создан из итерируемой пары ключ-значение. Итерация, использованная выше, была выражением генератора .
str
является встроенным типом, поэтому присвоение строки str
перезаписывает
встроенный. Лучше выбрать другое имя переменной, чтобы избежать
Будущие удивительные ошибки.
Я читаю и пишу списки в обратном порядке:
[ expression # (3)
for variable in # (2)
iterable # (1)
]
(1): Сначала поймите итерируемое. В приведенном выше решении это text.split('|')
.
(2): for variable in
заставляет variable
присваиваться значениям в iterable
, по одному за раз.
(3): Наконец, expression
может быть любым выражением Python, (обычно) с использованием variable
.
Синтаксис для выражений генератора почти одинаков. Разница между пониманием списка и выражением генератора заключается в том, что понимание списка возвращает список, в то время как выражение генератора возвращает итератор - объект, который возвращает свое содержимое по требованию (при зацикливании или когда next
называется) вместо генерации всех элементов одновременно, как в случае с list
с.
Список может занимать много памяти, если список длинный.
Выражение генератора будет занимать меньше памяти (и даже может быть бесконечным), поскольку не все элементы должны существовать в памяти одновременно.