我现在正试图将列表看起来像:
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'}
使最大值显着缩小。
分隔符我在键和值之间的列表中使用的是空格。
对我能用它做什么的任何猜测?
提前致谢。
答案 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']