【问题标题】:Looking for a Python dict comprehension from a loop I wrote从我写的循环中寻找 Python dict 理解
【发布时间】:2015-04-01 20:38:52
【问题描述】:

我是 Python 新手,并试图从这个 for 循环中编写字典理解:

    results = []
    for line in self.data:
        if value in line:
            item = dict(zip(self.keys, line))
            results.append(item)
        continue
    return results

self.keys 是一个列表 self.data 是属于这些键的值列表的列表。基本上,我有一个制表符分隔的文本文件(键)顶部的值列表,然后是文件中表示的实际项目的值的一堆行:

[scene, take, camera]
[12, 1, A]
[12, 1, B]
[12, 2, A]
[12, 2, B]

等等……

我想要,

{scene:12, take:1, camera:A}

我的代码有效,但我正在努力学习,所以我想知道是否有人可以教我如何将其编写为理解。

任何帮助将不胜感激!

谢谢,

【问题讨论】:

  • continue 是多余的
  • 旁白:你听说过csv.DictReader吗?
  • 你好,马特。除了语法错误,我没有尝试任何其他的东西,所以我没有保留任何东西来粘贴,抱歉。
  • 您好帝斯曼。不,我没有听说过,但我不允许实际导入任何东西。我应该只使用内置插件来编写它。
  • 帕德里亚克·坎宁安,对不起。我应该包括 def 的第一行。 def dicts(self, value):

标签: python list dictionary dictionary-comprehension


【解决方案1】:

试试这个:

return [dict(zip(self.keys, line)) for line in self.data if value in line]

这实际上是一个列表推导,因为我们正在构建一个列表。

【讨论】:

    【解决方案2】:

    根据我从问题中可以理解的内容,这应该可行

    result=[dict(zip(self.keys, line)) for line in self.data if value in line]
    

    【讨论】:

      【解决方案3】:

      首先,您可以将代码简化为:

      results = []
      for line in self.data:
          if value in line:
              item = dict(zip(self.keys, line))
              results.append(item)
      return results
      

      这表明你的循环是for line in self.data,你的值是dict(zip(self.keys, line)),你的条件是value in line,所以你把值,然后循环,然后条件-`[值循环条件]。您的列表理解变为:

      result = [dict(zip(self.keys, line)) for line in self.data if value in line]
      return result
      

      你可以消除result,给你:

      return [dict(zip(self.keys, line)) for line in self.data if value in line]
      

      但是,正如 DSM 指出的那样,您可以这样做:

      import csv
      with open("...") as f:
          return list(csv.DictReader(f, fieldnames=next(f).strip().split(), dialect="excel_tab"))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-28
        • 2019-05-01
        相关资源
        最近更新 更多