从txt文件python创建字典

从txt文件python创建字典,python,Python,我有这样一个txt文件: 1234 John Smith 2345 Joe Bloggs 12 Matt Kemp etc. 我也有一个文本文件的副本,每个值都像“value”。 我想创建一个字典,格式如下: ['1234': 'John Smith', '2345': 'Joe Bloggs', '12': 'Matt Kemp'] 我目前的代码是: validclubs = {} with open("validclubs.txt") as f: for line in f:

我有这样一个txt文件:

1234 John Smith
2345 Joe Bloggs
12 Matt Kemp
etc.
我也有一个文本文件的副本,每个值都像“value”。 我想创建一个字典,格式如下:

['1234': 'John Smith', '2345': 'Joe Bloggs', '12': 'Matt Kemp']
我目前的代码是:

validclubs = {}
with open("validclubs.txt") as f:
    for line in f:
        (id, club) = line.split()
        d[int(id)] = val

print (d)

但是对于这两个文件,我都得到了
ValueError:太多的值无法解包(预期为2)

这里的问题是,您从
行中解包()
,这将给您一个包含三个元素的列表(您只解包了两个元素)解包三个元素,然后将名称和姓氏连接起来

validclubs = {}
with open("validclubs.txt") as f:
    for line in f:
        (id, name, lastName) = line.split()
        d[int(id)] = "{} {}".format(name, lastName)

print (d)
如果有多个案例(不总是姓名):


@omg的答案(使用maxsplit参数)可能是这里更好的解决方案……我在这里也学到了一些东西;-)

这里的问题是从
line.split()
中解包,它将为您提供一个包含三个元素的列表(您只解包两个元素),解包三个元素,然后连接名称和姓氏

validclubs = {}
with open("validclubs.txt") as f:
    for line in f:
        (id, name, lastName) = line.split()
        d[int(id)] = "{} {}".format(name, lastName)

print (d)
如果有多个案例(不总是姓名):

@omg的答案(使用maxsplit参数)可能是这里更好的解决方案……我在这里也学到了一些东西;-)

line.split()
在播放器的名字和姓氏之间的空格上进行分割

完整语法为:
string.split(分隔符,maxslit)
,其中
maxslit
指定要执行的拆分次数

(id,club)=line.split(maxslit=1)
应该可以。这也将处理一个或多个中间名的情况

(不相关,您的字典名称在循环中从
validclubs
更改为
d

line.split()
在播放器的名字和姓氏之间的空格上进行拆分

完整语法为:
string.split(分隔符,maxslit)
,其中
maxslit
指定要执行的拆分次数

(id,club)=line.split(maxslit=1)
应该可以。这也将处理一个或多个中间名的情况


(与此无关,您的字典名称在循环中从
validclubs
更改为
d

您可以使用字典理解和
split
replace
join
函数从validclubs.txt文件中的每一行创建字典

 with open("validclubs.txt") as f:
        d = {i.split(" ")[0]: " ".join(i.replace("\n", "").split(" ")[1:]) for i in f}
 print(d)
输出

{'1234': 'John Smith', '2345': 'Joe Bloggs', '12': 'Matt Kemp'}

您可以将字典理解与
split
replace
join
功能一起使用,从validclubs.txt文件中的每一行创建字典

 with open("validclubs.txt") as f:
        d = {i.split(" ")[0]: " ".join(i.replace("\n", "").split(" ")[1:]) for i in f}
 print(d)
输出

{'1234': 'John Smith', '2345': 'Joe Bloggs', '12': 'Matt Kemp'}
这是您的代码:)

这是您的代码:)


其他答案涵盖了所有主要内容,但我只想指出,您使用
val
来分配值,而不是前一行中的
club
。另外,您应该确保使用类似于
.strip()
的方法从每一行中剥离
“/n”
,所有主要内容都包含在其他答案中,但我只想指出,您使用
val
来分配值,而不是上一行的
club
。此外,您还应确保使用类似于
.strip()

的方法从每一行中剥离
“/n”
,谢谢,这应该是可行的,但是有些名字我们只有名字,有些名字和姓氏,一些名、中名和姓氏,你会如何处理?谢谢,这应该可以解决,但是有些名字我们只有名字,一些名、姓氏,一些名、中名和姓氏,那么你会如何处理呢?谢谢,这解决了问题,尽管我不得不将行更改为
(id,club)=line。替换(“\n”,”)。拆分(maxsplit=1)
,否则我在每个“俱乐部”的末尾都有
\n
。谢谢,这解决了问题,尽管我不得不将行更改为
(id,club)=行。替换(“\n”,”).split(maxsplit=1)
,否则我在每个“俱乐部”的末尾都有
\n