从我写的循环中寻找 Python 字典理解
Looking for a Python dict comprehension from a loop I wrote
我是 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}
我的代码有效,但我正在努力学习,所以我想知道是否有人可以教我如何将其编写为一种理解。
如有任何帮助,我们将不胜感激!
谢谢,
段
试试这个:
return [dict(zip(self.keys, line)) for line in self.data if value in line]
这实际上是一个列表理解,因为我们正在构建一个列表。
首先,您可以将代码简化为:
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
,所以你输入值,然后循环,然后是条件 - `[value loop有条件的]。您的列表理解变为:
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"))
根据我从问题中得到的理解,这应该可行
result=[dict(zip(self.keys, line)) for line in self.data if value in line]
我是 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}
我的代码有效,但我正在努力学习,所以我想知道是否有人可以教我如何将其编写为一种理解。
如有任何帮助,我们将不胜感激!
谢谢,
段
试试这个:
return [dict(zip(self.keys, line)) for line in self.data if value in line]
这实际上是一个列表理解,因为我们正在构建一个列表。
首先,您可以将代码简化为:
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
,所以你输入值,然后循环,然后是条件 - `[value loop有条件的]。您的列表理解变为:
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"))
根据我从问题中得到的理解,这应该可行
result=[dict(zip(self.keys, line)) for line in self.data if value in line]