将字符串列表转换为元组

3

你好,我正在尝试使用Python做一个字典。需要完成的任务是Python要读取一个文本文件,里面包含一些数值:

good    buono

我所做的是使用文件函数打开文件,替换制表符并添加反引号以创建列表,使其看起来像这样:

["('good', 'buono')", "('afternoon', 'pomeriggo')",... and so on

但问题在于每个单词翻译的类型不是元组,而是字符串。当我试图查看第一个元素(编号为0)时,它显示的值是

"('good', 'buono')"

这是一个字符串。我需要使用字典公式,以便将其类型转换为字典,但我无法这样做,因为它是字符串列表(必须是元组列表)。

那么我该如何将该字符串列表转换为元组列表?

3个回答

4
假设你的文件中每对单词都在不同的行上,你可以这样做:
mydict = {line.split()[0]: line.split()[1] for line in myfile}

这将转换一个类似的文件:
good    buono
afternoon   pomeriggo
thanks    grazie

转换为

{"good": "buono", "afternoon": "pomeriggo", "thanks": "grazie"}

中间不需要元组。

.split() 方法可以将输入的字符串按空格分割,同时去掉前后空白。

>>> "  good\tbuono  \n".split()
['good', 'buono']

谢谢Pietzcker先生!您能解释一下循环中的split函数是做什么用的吗?谢谢。 - Sarp Kaya
关于 split() 的信息可以在这里找到:http://docs.python.org/library/stdtypes.html#str.split。它基本上接受一个字符串,并根据特定的分隔符(默认为“ ”)将该字符串分成单独的部分,将它们放入列表中。 - Makoto
mydict = dict(imap(str.split, myfile)) 我的词典 = 字典(映射函数 str.split 到 myfile 上) - jfs
@TimPietzcker 这样会对每一行调用 split() 两次,对吧?只是好奇,有没有一种方法可以在每一行中只调用一次 split() 呢? - jb.
@jb:是的,可以看看J.F. Sebastian的评论。 - Tim Pietzcker

4
with open('input.txt') as f:
     result = map(str.split, f)
     # -> [['good', 'buono'], ['afternoon', 'pomeriggo']]
     d = dict(result)
     # -> {'good': 'buono', 'afternoon': 'pomeriggo'}

这并不会将字符串作为元组列表返回。 - Makoto
@Makoto 这是一件好事。字符串是一个不必要的中间步骤。 - jb.
1
@Makoto:如果列表的列表不足够并且您需要元组列表,请使用map(tuple, result) - jfs
等一下,我刚试了这段代码。它似乎会将字符串的各个元素分开,而不是基于空格进行分割。 - Makoto
@Makoto:f是一个文件。从with open('input.txt') as f语句中可以清晰地看出来。使用f = StringIO(your_string)或者f = your_string.splitlines()将输入作为单个字符串接受。 - jfs
显示剩余2条评论

1

ast会像@onemach建议的那样工作,但您可能希望将字符串读入元组中。

片段:

li = []
with open("file.txt", 'r') as f:
    li.append(tuple(f.readline().split('\t')))

这将会把字符串按照制表符分割,并将其放入元组对象中,然后将该元组对象附加到列表中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接