@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())


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

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

Войти через центр авторизации
Похожие вопросы