Уведомления

Группа в Telegram: @pythonsu

#1 Май 18, 2015 23:24:01

Jeck290
От:
Зарегистрирован: 2010-01-03
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Получить много словарей из одного списка ?

Есть список

a = [1,2,3,4]
Сам список может быть разной длинны
Нужно получить много маленьких словарей , в данном случае
{1:2},{3:4}
Тоесть список нужно разделить по парам , первый индекс это ключ а второй это значение.
Подскажите как эфективнее реализовать такой алгоритм?



Отредактировано Jeck290 (Май 18, 2015 23:24:44)

Офлайн

#2 Май 19, 2015 01:52:05

giveback
Зарегистрирован: 2015-05-03
Сообщения: 36
Репутация: +  6  -
Профиль   Отправить e-mail  

Получить много словарей из одного списка ?

Вот так например (корректно будет работать при чётном количестве элементов, иначе проигнорирует последний):

def list_to_dicts(l):
    result = []
    for k,v in zip(l[::2], l[1::2]):
        result.append({k:v})
    return result

Или в виде генератора:

def list_to_dicts(l):
    for k,v in zip(l[::2], l[1::2]):
        yield {k:v}

Не знаю насколько это эффективно.

Отредактировано giveback (Май 19, 2015 02:11:37)

Офлайн

#3 Май 19, 2015 05:38:04

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Получить много словарей из одного списка ?

Для разбивки списка lst на куски по n элементов есть снипет

zip(*[iter(lst)]*n)
получить словарь теперь совсем просто
a = [1, 2, 3, 4, 5, 6]
print dict(zip(*[iter(a)]*2))



Офлайн

#4 Май 19, 2015 06:59:25

Jeck290
От:
Зарегистрирован: 2010-01-03
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Получить много словарей из одного списка ?

Спасибо всем )), вечером ломал голову.
FishHook
Вариант giveback будет попроще ), что это за звездочки в начале списка ?



Офлайн

#5 Май 19, 2015 07:24:44

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Получить много словарей из одного списка ?

Офлайн

#6 Май 19, 2015 12:28:03

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Получить много словарей из одного списка ?

[ {k:v} for k,v in dict(zip(filter(lambda x: x%2, a), filter(lambda x: not x%2, a))).items() ]
[ {k:v} for k,v in dict(zip(a[::2], a[1::2])).items() ]



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Май 19, 2015 12:39:35)

Офлайн

#7 Май 19, 2015 12:40:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Получить много словарей из одного списка ?

Jeck290
Нужно получить много маленьких словарей
Зачем получать много маленьких словарей?



Офлайн

#8 Май 19, 2015 15:43:00

Jeck290
От:
Зарегистрирован: 2010-01-03
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Получить много словарей из одного списка ?

Да парсер пишу, а там проблема , контент на странице имеет разную структуру , например почти все заглавления и строки оформлены тегом <p> и нужно как то выбрать заглавление и контент, обычно первым в списке идет заглавление а вторым контент )) , может я все усложняю но как парсить меняющиеся данные одним шаблоном я не знаю ))



Офлайн

#9 Май 20, 2015 00:33:42

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Получить много словарей из одного списка ?

Jeck290
может я все усложняю
Обычно это представляют списком списков. Словари не сохраняют порядок элементов.



Отредактировано py.user.next (Май 20, 2015 00:34:38)

Офлайн

#10 Май 20, 2015 19:54:55

Jeck290
От:
Зарегистрирован: 2010-01-03
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Получить много словарей из одного списка ?

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



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version