我有一个字符串列表。我愿意创建一个字典,其键是列表中的所有字符串(当然每个字符串都是键)。
现在为值:与每个键对应的值将是列表上的键字符串后面的字符串。值将来自列表类型。
备注:最后一个单词不会包含在词典中。 一个键不会出现两次。如果某个键的值不止一个,它们将被添加到该键的现有值列表中。 顺序无关紧要(如果字典使工作更容易,则不能对字典进行排序)。
示例:
列表:
List = ['today','is','worm','and','dry']
字典将是:
Dic={'today': ['is'], 'is': ['worm'],'worm': ['and'], 'and':['dry']}
谢谢,
答案 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_dict
和my_list
,但最好给它们更有意义的名称)并且不要覆盖list
和dict
个关键字(如果您希望为变量提供此类名称)。