Задать вопрос
@lug32

Из словаря список списков в Python 3?

Добрый день.
Есть словарь
a = {
    '1': '111',
    '2': '222',
    '3': '333',
    '4': '444',
    ...
}


Надо с помощью генератора сделать список списков ключей, которые идут парно. Такого плана:
[[1,2], [3,4], ...]

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

P.S. Понятно, что это можно сделать с помощью цикла. Вопрос чисто теоретический, чтобы лучше разобраться в генераторах.
  • Вопрос задан
  • 825 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Решения вопроса 1
adugin
@adugin Куратор тега Python
zip(*[a.iterkeys()]*2)
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
angru
@angru
не очень красиво но:

keys = a.values()

assert not len(keys) % 2, 'только для массивов четной длины'

print([[keys[i], keys[i+1]] for i in range(0, len(keys), 2)])
Ответ написан
@766dt
Можно как-то так:
>>> sorted_keys = sorted(a.keys())
>>> list(zip(sorted_keys[::2], sorted_keys[1::2]))
[('1', '2'), ('3', '4')]


UPD:
Если хочется решить именно при помощи генераторов:

>>> sorted_keys = sorted(a.keys())
>>> [sorted_keys[i:i+2] for i in range(0, len(sorted_keys), 2)]
[['1', '2'], ['3', '4']]
Ответ написан
@kazmiruk
def x():
	keys = a.keys()
	for i in xrange(0, len(keys), 2):
		yield keys[i:i + 2]

print list(x())


Только учтите, что словарь не сохраняет порядок записей, поэтому ключи могут быть сгруппированы как попало.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽