2015-04-01 47 views
0

我是新来的Python,并试图从该写一本字典修真循环寻找Python字典理解:从一个循环我写

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} 

我作品的代码,但我努力学习,所以我想知道,如果有人可以教我怎么写,作为一个理解。

任何帮助,将不胜感激!

感谢,

+1

'继续'是多余的 – frnhr 2015-04-01 20:44:20

+0

另外:你听说过['csv.DictReader'](https://docs.python.org/3.4/library/csv.html#csv.DictReader)吗? – DSM 2015-04-01 20:44:23

+0

你好马特。我没有尝试任何除了语法错误之外的任何东西,所以我没有把它粘贴在这里,对不起。 – 2015-04-01 20:47:30

回答

1

什么我可以从这个问题可以理解,这应该工作

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

试试这个:

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

这实际上是一个列表理解,因为我们正在建立一个列表。

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"))