Несоответствие, когда я отображаю списки в словарь, используя dict и zip - Python - PullRequest
0 голосов
/ 21 августа 2011

Я попробовал этот пример, и он работал нормально: Отображение двух списков в словарь на Python

Но если я заменил "ключи" этим списком: ['2', '3',' 2 ',' 3 ',' 4 ',' 2 ',' 4 ',' 2 ',' 2 ',' 3 ',' 2 ',' 3 ',' 4 ']

и «значения» с этим списком: [2, 3, 4, 5, 6, 4, 2, 1, 1, 2, 3, 4, 5]

Класс dict пытался создатьсловарь только части «значения»!

ВЫХОД: {'3': 4, '2': 3, '4': 5}

Попробуйте сами, вы должны получитьтот же ответ.А почему и альтернатива этому была бы отличной.

Ответы [ 3 ]

7 голосов
/ 21 августа 2011

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

>>> keys = ['2', '3', '2-1', '3-1', '4', '2-2', '4-1', '2-3', '2-4', '3-2', '2-5', '3-3', '4-2']
>>> values = [2, 3, 4, 5, 6, 4, 2, 1, 1, 2, 3, 4, 5]
>>> dict(zip(keys, values))
{'2-2': 4, '4-1': 2, '4-2': 5, '2-1': 4, '2-4': 1, '2-3': 1, '2-5': 3, '3-3': 4, '3-2': 2, '3-1': 5, '3': 3, '2': 2, '4': 6}

Кроме того, вы можете использовать целочисленные ключи для словарей просто отлично, поэтому вам не понадобится '2', вы можете просто использовать 2.

3 голосов
/ 21 августа 2011

Дикт требует, чтобы не было дубликатов ключей, но в вашем списке ключей есть много дубликатов, поэтому диктат объединит их. Если вы хотите иметь несколько ключей, вы можете использовать реализацию multidict для достижения этого:

>>> a =  ['2', '3', '2', '3', '4', '2', '4', '2', '2', '3', '2', '3', '4']
>>> b =  [2, 3, 4, 5, 6, 4, 2, 1, 1, 2, 3, 4, 5]
>>> dict(zip(a, b))
{'3': 4, '2': 3, '4': 5}
>>> multidict.MultiDict(zip(a, b))
MultiDict([('2', 2), ('3', 3), ('2', 4), ('3', 5), ('4', 6), ('2', 4), ('4', 2),
 ('2', 1), ('2', 1), ('3', 2), ('2', 3), ('3', 4), ('4', 5)])

Примечание: я использовал paste.util.multidict.MultiDict, установка pip install paste.

2 голосов
/ 21 августа 2011

Словарь - это хеш, что означает, что каждый ключ может существовать только один раз.

>>> a =  ['2', '3', '2', '3', '4', '2', '4', '2', '2', '3', '2', '3', '4']
>>> b =  [2,    3,   4,   5,   6,   4,   2,   1,   1,   2,   3,   4,   5 ]
>>> c = zip(a, b)
>>> c
[('2', 2), ('3', 3), ('2', 4), ('3', 5), ('4', 6), ('2', 4), ('4', 2), ('2', 1), ('2', 1), ('3', 2), ('2', 3), ('3', 4), ('4', 5)]
>>> dict(c)
{'3': 4, '2': 3, '4': 5}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...