【问题标题】:I want to make dictionary from text file data by lambda functions我想通过 lambda 函数从文本文件数据中制作字典
【发布时间】:2017-09-04 09:57:31
【问题描述】:

我有一个包含

的文本文件
AL 28
AD 24
AT 20
BE 16
BA 20

我想用这个文本文件制作字典,比如

iban_lengths={}
with open('iban_lengths.txt') as fi:
    for line in fi.readlines():
        fields=line.split()
        iban_lengths[fields[0]=int(fields[1])

但我想通过 lambda 函数在两行和一行中制作相同的字典。 我该怎么做?

【问题讨论】:

    标签: python dictionary command-line lambda


    【解决方案1】:

    编辑:看起来你是为了简洁,在这种情况下我会提出这个建议:

    iban_lengths = {a:int(b) for a,b in (r.strip().split() for r in open('iban_lengths.txt'))}
    

    (虽然没有lambdas 在编写这段代码时受到伤害,但它仍然很简洁。)

    【讨论】:

      【解决方案2】:

      使用 lambda 的解决方案:

      with open('iban_lengths.txt') as fi:
          iban_lengths = {line.split()[0]: (lambda line: line.split()[1])(line) for line in fi.readlines()}
      print(iban_lengths)
      

      【讨论】:

        【解决方案3】:

        如果你想要Pythonic的方式,可以尝试使用dict理解,分行生成字典:

        print({i.split()[0]:int(i.split()[1].strip('\n')) for i in list(open('ooo.json'))})
        

        输出:

        {'BE': 16, 'AT': 20, 'BA': 20, 'AL': 28, 'AD': 24}
        

        【讨论】:

          【解决方案4】:

          快速解答 (TL;DR)

          ## barebones-simple-example -- 字典理解 mydict = {ixx: ixx**2 for ixx in range(6) if(ixx > 1)} ## ^ ^ ^ ^ ## | | | | ##键值原始数据过滤条件 ## ## 结果 --> {2: 4, 3: 9, 4: 16, 5: 25}

          详细解答

          上下文

          • Python 2.7+
          • Python 3.x
          • 创建可从命令行输入的“单行”样式程序
          • 迭代原始输入数据以创建字典数据结构(又名关联数组)

          问题

          • 场景: 开发人员 PyjooParkLift 希望创建行数最少的程序,将原始数据输入转换为 Python 字典。

          详情

          这里提出的问题似乎混合了两个不同的问题:

          • Q1) 如何在 python 中创建“单线”风格的程序来执行通用任务
          • Q2) 哪些特定的语言结构最适合完成任务

          虽然 python lambda 函数确实提供了简洁的语法,但没有必要为了达到问题 1 的目标而使用它们。

          如果唯一的目标是创建简洁的源代码(例如用于 bash 命令提示符)there is no general reason why a lambda function has to be used at all

          解决方案

          以此类推……

          ## 这个程序使用 lambda ... mydict = {ixx: (lambda ixx: ixx**2)(ixx) for ixx in range(6)} ## ... 在不使用 lambda 的情况下产生与此相同的结果 mydict = {ixx: ixx**2 for ixx in range(6) if(ixx > 1)}

          陷阱

          • 在从 rawdata 输入文件构造内容时:
            • 确保输入数据已标准化并采用您期望的格式
            • 确保安全上下文定义明确,并且您没有滥用可能不受信任的输入
            • 确保考虑常规 IO 问题,例如文件大小限制和空行

          另见

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-07-13
            • 2021-03-05
            • 1970-01-01
            • 2020-09-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多