将列表转换为字典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似乎存在的(未知)问题?