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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
将列表转换为字典python3.5_Python_List_Dictionary - Fatal编程技术网

将列表转换为字典python3.5

将列表转换为字典python3.5,python,list,dictionary,Python,List,Dictionary,我现在尝试打开一个如下列表: values = ['a 51', 'b 9', 'c 9', 'd 9', 'e 1'] 进入字典: values = {'e': '1', 'c': '9', 'b': '9', 'a': '51', 'd': '9'} 在我的117份名单中,它的效果很好 values = {str(i.split()[0]): i.split()[1] for i in values} 但不幸的是,对于三个列表,它不起作用,我得到如下输出: values = {'e':

我现在尝试打开一个如下列表:

values = ['a 51', 'b 9', 'c 9', 'd 9', 'e 1']
进入字典:

values = {'e': '1', 'c': '9', 'b': '9', 'a': '51', 'd': '9'}
在我的117份名单中,它的效果很好

values = {str(i.split()[0]): i.split()[1] for i in values}
但不幸的是,对于三个列表,它不起作用,我得到如下输出:

values = {'e': '1', 'c': '9', 'b': '9', 'a': '1', 'd': '9'}
使最大值大大减小

我在列表中使用的键和值之间的分隔符是空格

猜猜我能用它做什么


提前感谢。

如果每个字符串中只有一个空格,请尝试下面的命令

values = {str(i.split(' ')[0]): i.split(' ')[1] for i in values}
只是使用了
split(“”)
而不是
split()
。如果您需要包含任何其他未知分隔符或多个空格,请在注释中告诉我

您可以将发电机功能与
dict
类型一起使用,如下所示:

>>> values = ['a 51', 'b 9', 'c 9', 'd 9', 'e 1']

>>> dict(v.split() for v in values)
{'a': '51', 'c': '9', 'b': '9', 'e': '1', 'd': '9'}

如果要根据第一次出现的空格(根据我对三个列表问题的理解)将字符串拆分为多个空格,可以将
maxslit
参数传递给
split
函数,如下所示:

#               v  v two spaces in each string
>>> values = ['a 51 67', 'b 9 81', 'c 9 56', 'd 9 90', 'e 1 12']

#                 v   v  split string only on the first occurrence of the <space> 
>>> dict(v.split(' ', 1) for v in values)
{'a': '51 67', 'c': '9 56', 'b': '9 81', 'e': '1 12', 'd': '9 90'}
#每个字符串中有两个空格
>>>数值=['a5167','b981','c956','d990','e112']
#仅在第一次出现
>>>dict(v.split(“”,1)表示v in值)
{'a':'5167','c':'956','b':'981','e':'1122','d':'990'}

这有点像胡乱猜测:您是否在尝试按值对结果进行排序

在这种情况下,您应该将这些数字转换为
int
,否则它们将按字典顺序排序(即在
9
之前排序
51
),从而使某些列表的“最大值大大小于”预期值

>>> values = ['a 51', 'b 9', 'c 9', 'd 9', 'e 1']
>>> d1 = {k: v for k, v in map(str.split, values)}
>>> sorted(d1, key=d1.get, reverse=True)
['c', 'b', 'd', 'a', 'e']

>>> d2 = {k: int(v) for k, v in map(str.split, values)}    
>>> sorted(d2, key=d2.get, reverse=True)
['a', 'c', 'b', 'd', 'e']

我们需要看看这些“失败列表”是什么样子的。顺便说一句,您的示例代码调用
split
的次数超过了必要的次数,即显式for循环可能比您使用的dict理解更好。正如您提到的“三个列表,它不起作用”。你能和我们分享一下这三个列表的样子吗。您希望得到的结果是什么?我可以知道这个解决方案出了什么问题,我得到了否决票吗?不是我的否决票,但可能是因为仍然调用了两次
split
,以及无用的
str
转换。此外,您应该解释使用
split(“”)
w.r.t.解决OPs问题的好处。(如果字符串中有不可见的空白字符,这实际上可能会解决问题,但我们还不知道)除了更紧凑,不做所有那些不必要的操作之外,这将如何解决OP似乎存在的(未知)问题?