Словарь Python со списком в качестве ключей и кортежем в качестве значений - PullRequest
6 голосов
/ 31 мая 2011

У меня есть список, который я хочу использовать в качестве ключей к словарю, и список кортежей со значениями.Примите во внимание следующее:

d = {}
l = ['a', 'b', 'c', 'd', 'e']
t = [(1, 2, 3, 4), (7, 8, 9, 10), (4, 5, 6, 7), (9, 6, 3, 8), (7, 4, 1, 2)]

for i in range(len(l)):
    d[l[i]] = t[i]

Список будет состоять из 5 значений и будет последовательно 5 кортежей, однако в каждом кортеже будут сотни тысяч значений.

Мой вопрос такой:какой самый быстрый способ заполнить словарь d кортежами t, а ключами являются значения в l?

Ответы [ 2 ]

17 голосов
/ 31 мая 2011

Я не делал тайминги, но, вероятно,

d = dict(zip(l, t))

будет довольно хорошо. Я не думаю, что только для 5 пар ключ-значение izip() даст какое-то преимущество перед zip(). Тот факт, что у каждого кортежа есть много элементов, не имеет значения для этой операции, поскольку объекты кортежа не копируются ни в какой момент, ни с вашим подходом, ни с моим. В указатель вводятся только указатели на объекты кортежа.

9 голосов
/ 31 мая 2011

Чтобы построить на ответе Свена , использование itertools.izip будет быстрее и потребует меньше памяти, если вам потребуется создать больший дикт.Только с пятью парами ключ / значение время для создания dict будет крошечным.

python -m timeit -s "l = l2 = range(100000)" "dict(zip(l, l2))" 
1000 loops, best of 3: 20.1 msec per loop
python -m timeit -s "import itertools; l = l2 = range(100000)" "dict(itertools.izip(l, l2))"
1000 loops, best of 3: 9.59 msec per loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...