Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在字典中设置多个键/值(python 2.72)_Python_List_Dictionary_Key - Fatal编程技术网

在字典中设置多个键/值(python 2.72)

在字典中设置多个键/值(python 2.72),python,list,dictionary,key,Python,List,Dictionary,Key,我有一个字符串列表。我愿意创建一个字典,它的键是列表中的所有字符串(每个字符串当然是一个键) 现在来看值:每个键对应的值将是列表中键字符串之后的字符串。这些值将来自列表类型 备注:最后一个单词将不包括在词典中。 钥匙不会在驾驶员信息中心上出现两次。如果某个键有多个值,它们将被添加到该键的exist值列表中。 顺序无关紧要(如果字典使工作更容易,它就不能被排序) 例如: 名单如下: List = ['today','is','worm','and','dry'] 词典将是: Dic={'to

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

现在来看值:每个键对应的值将是列表中键字符串之后的字符串。这些值将来自列表类型

备注:最后一个单词将不包括在词典中。 钥匙不会在驾驶员信息中心上出现两次。如果某个键有多个值,它们将被添加到该键的exist值列表中。 顺序无关紧要(如果字典使工作更容易,它就不能被排序)

例如:

  • 名单如下:

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

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

试试这个:

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

不是很好,但它正在工作

>>> 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'}
>>> 
(基于@eumiro的回答)


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

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关键字(如果您想给变量这样的名称)实际上,我相信w1的
d=dict((w1,[w2]),w2在zip中(l,l[1:])
就足够了,因为它会分配
{'and':['dry'],'is':['worm'],'worm':['and'],'today':['is']}
d
@Tadeck-这种情况下可以,但是如果你不能分配更多的项目,这个列表就没有任何意义了。你错了,词典是可编辑的,其中的每个列表也是可编辑的。例如,你可以做
d['和'].append('something')
,你的
d
将等于
{'and':['dry','something'],'is':['worm'],'worm':['and'],'today':['is']}
。如果我使用元组,情况会有所不同,但我没有。我真的不理解你的推理——我的代码更短,解决了问题,做了你说它做不到的事情。请澄清。
>>> Dic
{'and': ['dry'], 'is': ['worm'], 'worm': ['and'], 'today': ['is']}
from itertools import izip
Dic = dict((key, [item]) for key, item in izip(List, List[1:]))