将列表转换为字典python3.5

时间:2017-05-26 12:31:33

标签: 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': '1', 'c': '9', 'b': '9', 'a': '1', 'd': '9'}

使最大值显着缩小。

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

对我能用它做什么的任何猜测?

提前致谢。

3 个答案:

答案 0 :(得分:2)

您可以将{em> generator 功能与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'}

如果您想根据第一次出现的空间拆分包含多个空格的字符串(基于我对您的三个列表问题的理解),您可以将maxsplit参数传递给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'}

答案 1 :(得分:0)

如果每个字符串中都有单个空格,请尝试使用以下命令

values = {str(i.split(' ')[0]): i.split(' ')[1] for i in values}

刚刚使用split(' ')代替split()。如果您需要包含任何其他未知的分隔符或多个空格,请在评论中告诉我。

答案 2 :(得分:0)

这是一个疯狂的猜测:您是否可能尝试按值对结果进行排序?

在这种情况下,您应该将这些数字转换为int,否则它们将按字典顺序排序(即在51之前排序9),从而使“最大值显着缩小”比预期的一些清单。

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