从txt文件python创建字典
我有这样一个txt文件:从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:
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