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

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}

Не знаю насколько это эффективно.
FishHook
Для разбивки списка lst на куски по n элементов есть снипет
zip(*[iter(lst)]*n)
получить словарь теперь совсем просто
a = [1, 2, 3, 4, 5, 6]
print dict(zip(*[iter(a)]*2))
Jeck290
Спасибо всем )), вечером ломал голову.
FishHook
Вариант giveback будет попроще ), что это за звездочки в начале списка ?
Rodegast
[ {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() ]
py.user.next
Jeck290
Нужно получить много маленьких словарей
Зачем получать много маленьких словарей?
Jeck290
Да парсер пишу, а там проблема , контент на странице имеет разную структуру , например почти все заглавления и строки оформлены тегом <p> и нужно как то выбрать заглавление и контент, обычно первым в списке идет заглавление а вторым контент )) , может я все усложняю но как парсить меняющиеся данные одним шаблоном я не знаю ))
py.user.next
Jeck290
может я все усложняю
Обычно это представляют списком списков. Словари не сохраняют порядок элементов.
Jeck290
ну как бы в списке помещаются маленькие словари, поле и его значение )) можно конечно и список в списки засунуть но это уже другая история
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB