Вы упомянули в комментариях, что у вас есть повторяющиеся записи. Мы можем работать с этим. Возьмите свой любимый метод генерации списка кортежей, а также расширить его в for
цикла:
from itertools import izip
dictionary = {}
for k, v in izip(List[::2], List[1::2]):
if k not in dictionary:
dictionary[k] = set()
dictionary[k].add(v)
Или мы могли бы использовать collections.defaultdict
поэтому мы не должны проверить, если ключ уже инициализирован:
from itertools import izip
from collections import defaultdict
dictionary = defaultdict(set)
for k, v in izip(List[::2], List[1::2]):
dictionary[k].add(v)
Мы закончим со словарем, где все ключи являются наборами, а наборы содержат значения. Это может оказаться неприемлемым, потому что наборы, например словари, не могут содержать дубликаты, поэтому, если вам нужен один ключ для хранения двух одинаковых значений, вам нужно будет изменить его на кортеж или список. Но это должно заставить вас начать.
Вы можете вынуть '[]' S, чтобы изменить список понимание к генератору для большей эффективности: 'ДИКТ ((List [я], список [я + 1]) для г в диапазоне (0 , len (List), 2)) 'Таким образом, он не будет генерировать список, чтобы позже выбросить его после преобразования в dict. –
Ты, мой друг, спасатель жизни, да благословит тебя Бог. Я был на этом в течение двух часов –
ОК, теперь я [] оставил вначале для совместимости с py2.3, * и * также тот факт, что я слышал точную противоположность - для очень маленьких коллекций построение списка быстрее, чем накладные расходы на создание генератора. Я могу попросить моего коллегу получить более подробную информацию об этом, но это имеет смысл. – zzzeek