将带空格的字符串添加到字典Python(2.7)和#x2B;分类

将带空格的字符串添加到字典Python(2.7)和#x2B;分类,python,python-2.7,sorting,dictionary,Python,Python 2.7,Sorting,Dictionary,我正在读取一个名为“id2”的输入文件,该文件是以这种格式设置的 9 This 6 This Is 15 This Is The 42 This Is The Word 我正在尝试编写一个脚本,将每一行添加到它自己的字典中(数字是关键字,后面的任何单词都是值)。目前,我的代码只适用于不包含空格的字符串(即,它只适用于第一行“9 This”)。我收到的错误是“ValueError:太多的值无法解包” 我还需要脚本只打印“key:value”结果(而不是字典本身),并对其进行数字排序。我很确定我需

我正在读取一个名为“id2”的输入文件,该文件是以这种格式设置的

9 This
6 This Is
15 This Is The
42 This Is The Word
我正在尝试编写一个脚本,将每一行添加到它自己的字典中(数字是关键字,后面的任何单词都是值)。目前,我的代码只适用于不包含空格的字符串(即,它只适用于第一行“9 This”)。我收到的错误是“ValueError:太多的值无法解包”

我还需要脚本只打印“key:value”结果(而不是字典本身),并对其进行数字排序。我很确定我需要dict.key和list.sort,但我不确定如何实现。以下是我迄今为止的代码:

d = {}
with open("id2") as f:
    for line in f:
        (key, val) = line.split()
        d[int(key)] = val
print d
试试这个

d = {}
with open("id2") as f:
    for line in f:
        lst = line.split()
        key, val = lst[0], " ".join(lst[1:])
        d[int(key)] = val
print d

您正在按空格拆分字符串(默认为
str.split
)。您试图将结果赋给2个值,但对于给定字符串,结果总是多于2个值

如果字符串的第一个元素始终是数字,后跟空格,则可以执行以下操作:

key = int(line[0])
value = line[2:]
(不需要浪费对str.split.函数调用的键入时间。记住字符串是一个列表)

要排序:

sorted(d)
但您可能希望在排序后保留排序,因此请改用
OrderedDict

from collections import OrderedDict
d_sorted = OrderedDict(sorted(d))

此实现解决了您的问题。将maxsplits参数添加到
line.split()
将只在一个位置中断字符串。参数None将导致删除数字和字符串之间的任何连续空格。我添加了
val.rstrip()。最后我按键排序,把每一项都打印出来

d = {}
with open("id2") as f:
    for line in f:
        (key, val) = line.split(None, 1)
        d[int(key)] = val.rstrip()
for key in sorted(d):
    print key, ':', d[key]

将每一行添加到它自己的字典中
-是否尝试为文件中的每一行创建新字典?在python 3.x中,可以使用扩展的iterable解包:例如:
键,*val=line.split()
,我知道您使用的是Python 2,所以这不适用:)拆分然后重新加入是不必要的…只需索引字符串
key=int(第[0]行]
将在数字超过1位时生成错误的键。
d = {}
with open("id2") as f:
    for line in f:
        (key, val) = line.split(None, 1)
        d[int(key)] = val.rstrip()
for key in sorted(d):
    print key, ':', d[key]