将多个键/值设置为字典(python 2.72)

时间:2011-11-26 14:09:33

标签: python list dictionary key

我有一个字符串列表。我愿意创建一个字典,其键是列表中的所有字符串(当然每个字符串都是键)。

现在为值:与每个键对应的值将是列表上的键字符串后面的字符串。值将来自列表类型。

备注:最后一个单词不会包含在词典中。 一个键不会出现两次。如果某个键的值不止一个,它们将被添加到该键的现有值列表中。 顺序无关紧要(如果字典使工作更容易,则不能对字典进行排序)。

示例:

  • 列表:

    List = ['today','is','worm','and','dry']
    
  • 字典将是:

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

谢谢,

5 个答案:

答案 0 :(得分:1)

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']}

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

不是很好,但它正在运作

>>> 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'}
>>> 

答案 3 :(得分:0)

(根据@ 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']}

答案 4 :(得分:0)

您可以通过以下代码实现它:

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

,结果将如下:

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

如果您需要更高性能的解决方案,可以使用izip()功能

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

会给出相同的结果,但效率会更高。

但请遵循Python的命名约定(例如,调用变量my_dictmy_list,但最好给它们更有意义的名称)并且不要覆盖listdict个关键字(如果您希望为变量提供此类名称)。