我是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}
我的代码有效,但我正在努力学习,所以我想知道是否有人可以教我如何将其作为一种理解。
任何帮助将不胜感激!
谢谢,
丹
答案 0 :(得分:2)
试试这个:
return [dict(zip(self.keys, line)) for line in self.data if value in line]
这实际上是一个列表理解,因为我们正在建立一个列表。
答案 1 :(得分: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"))
答案 2 :(得分:1)
根据我可以从问题中理解的内容,这应该有效
result=[dict(zip(self.keys, line)) for line in self.data if value in line]