установка нескольких ключей / значений в словарь (python 2.72) - PullRequest
2 голосов
/ 26 ноября 2011

У меня есть список строк. Я готов создать словарь, ключами которого являются все строки в списке (конечно, каждая строка является ключом).

Теперь для значений: значение, соответствующее каждому ключу, будет строкой, следующей за строкой ключа в списке. Значения будут из типа списка.

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

Пример:

  • для списка:

    List = ['today','is','worm','and','dry']
    
  • в словаре будет:

    Dic={'today': ['is'], 'is': ['worm'],'worm': ['and'], 'and':['dry']}
    

Спасибо

Ответы [ 5 ]

1 голос
/ 26 ноября 2011
l = ['today','is','worm','and','dry']

d = {}
for w1, w2 in zip(l, l[1:]):
    d.setdefault(w1, []).append(w2)

# d == {'and': ['dry'], 'is': ['worm'], 'today': ['is'], 'worm': ['and']}
0 голосов
/ 26 ноября 2011

Вы можете достичь этого с помощью следующего кода:

Dic = dict((key, [item]) for key, item in zip(List, List[1:]))

, и результат будет следующим:

>>> Dic
{'and': ['dry'], 'is': ['worm'], 'worm': ['and'], 'today': ['is']}

Если вам нужно более эффективное решение, вы можете используйте izip() function :

from itertools import izip
Dic = dict((key, [item]) for key, item in izip(List, List[1:]))

, которая даст тот же результат, но более эффективным способом.

Но, пожалуйста, следуйте соглашениям по именованию для Python (например, называйте свои переменные my_dict и my_list, но желательно давать им более значимые имена) и не перезаписывайте list и dict ключевые слова (это на тот случай, если вы хотитедайте вашим переменным такие имена).

0 голосов
/ 26 ноября 2011

(на основе ответа @ eumiro)

>>> l = ['today','is','worm','and','dry']
>>> print dict(zip(l, l[1:]))
{'and': 'dry', 'is': 'worm', 'worm': 'and', 'today': 'is'}
>>> print dict(zip(l, l[1:] + [None]))
{'and': 'dry', 'dry': None, 'is': 'worm', 'worm': 'and', 'today': 'is'}
>>> print dict((k, [v]) for (k, v) in zip(l, l[1:] + [None]))
{'and': ['dry'], 'dry': [None], 'is': ['worm'], 'worm': ['and'], 'today': ['is']}
0 голосов
/ 26 ноября 2011

Не очень хорошо, но работает

>>> List = ['today','is','worm','and','dry']
>>> Dic ={}
>>> key = None
>>> for item in List:
...     if key:
...         Dic.update({key:item})
...     key=item
... 
>>> Dic
{'and': 'dry', 'is': 'worm', 'worm': 'and', 'today': 'is'}
>>> 
0 голосов
/ 26 ноября 2011

Попробуйте это:

lst = ['today','is','worm','and','dry']
dic = {}

for k in xrange(len(lst) - 1):
    dic[lst[k]] = [lst[k+1]]

Это эффективный ответ, поскольку он не создает никаких дополнительных списков для построения словаря. Вы можете проверить результат, это то, что ожидалось:

dic == {'today': ['is'], 'is': ['worm'],'worm': ['and'], 'and':['dry']}
> True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...