【问题标题】:converting a list of strings into a tuple将字符串列表转换为元组
【发布时间】:2012-01-27 05:55:22
【问题描述】:

您好,我正在尝试使用 Python 编写字典, 需要做的是python读取一个文本文件,其中包含以下值:

good    buono

我所做的是,使用文件功能打开文件并替换选项卡并添加反逗号以创建一个列表,使其看起来像

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

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

"('good', 'buono')"

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

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

【问题讨论】:

    标签: python list dictionary tuples


    【解决方案1】:
    with open('input.txt') as f:
         result = map(str.split, f)
         # -> [['good', 'buono'], ['afternoon', 'pomeriggo']]
         d = dict(result)
         # -> {'good': 'buono', 'afternoon': 'pomeriggo'}
    

    【讨论】:

    • 不过,这不会将字符串作为元组列表返回。
    • @Makoto 那是件好事。字符串是不必要的中间步骤。
    • @Makoto: map(tuple, result) 如果列表列表不够,您需要元组列表。
    • 握住手机;我刚刚尝试过这段代码。它似乎分割了字符串本身的各个元素,而不是根据空格分割它。
    • @Makoto:阅读str.split 并尝试again
    【解决方案2】:

    假设每对单词都在文件中的单独行上,您可以这样做:

    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']
    

    【讨论】:

    • 丹克 皮茨克先生!您还可以解释一下 split 函数在循环中的作用吗?谢谢
    • 关于split()的信息可以在here找到。本质上,它接受一个字符串,并基于特定的分隔符(默认为“”),将该字符串分成单独的部分,并将它们放在一个列表中。
    • @TimPietzcker 这将为每行调用两次split(),对吗?只是好奇,有没有办法做同样的事情,但每行一个拆分?
    • @jb.:是的,请参阅 J.F. Sebastian 的评论。
    【解决方案3】:

    ast 将按照@onemach 的建议工作,但您可能希望将字符串读取为元组。

    片段:

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

    这将拆分关于选项卡的字符串,并将其放入一个元组对象中,然后将其附加到一个列表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      相关资源
      最近更新 更多