@lug32

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

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


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

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

P.S. Понятно, что это можно сделать с помощью цикла. Вопрос чисто теоретический, чтобы лучше разобраться в генераторах.
  • Вопрос задан
  • 819 просмотров
Решения вопроса 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())


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

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

Похожие вопросы