0

我是 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]

ETC...

我想,

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

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

任何帮助,将不胜感激!

谢谢,

4

3 回答 3

2

尝试这个:

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

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

于 2015-04-01T20:42:28.267 回答
1

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

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"))
于 2015-04-01T20:44:18.980 回答
1

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

result=[dict(zip(self.keys, line)) for line in self.data if value in line]
于 2015-04-01T20:46:19.887 回答