【发布时间】:2021-01-12 04:35:30
【问题描述】:
我对在将文件读取为 csv 或 json 文件时使用列表理解有疑问。 在这第一个代码中,我使用正常的长方法来获取一行的值并将其附加到最后一个空列表中。正如预期的那样,这完全没有问题:
with open("file.csv") as W_F:
reader = csv.reader(W_F)
header = next(reader)
brightness,lons,lats=[], [], []
for row in reader:
bright=float(row[2])
brightness.append(bright)
lons.append(float(row[0]))
lats.append(float(row[1]))
在这段代码中,我尝试通过使用列表推导来缩小我的代码,但在这里我遇到了问题。我只得到第一个列表brightness = [float(row[2]) for row in reader] 的值。其他列表打印为空列表(lon = [float(rows[1])for rows in reader] 和 lat = [float(rows[1])for rows in reader])。
with open("file.csv") as W_F:
reader = csv.reader(W_F)
header = next(reader)
brightness = [float(row[2]) for row in reader]
lon = [float(rows[0])for rows in reader]
lat = [float(rows[1])for rows in reader]
在这里,我在读取 json 文件时使用了列表推导。我可以毫无问题地获得所有值:
with open("file.json")as f:
all_eq_data = json.load(f)
all_eq_dicts = all_eq_data['features']
mag = [dicts["properties"]["mag"] for dicts in all_eq_dicts]
lang = [dicts["geometry"]["coordinates"][0] for dicts in all_eq_dicts]
lat = [dicts["geometry"]["coordinates"][1] for dicts in all_eq_dicts]
有人可以向我解释为什么第二个代码中的列表理解不能正常工作吗?为什么在第二个代码中它只将值存储在第一个列表中而不是其他列表中?为什么它在第三个代码中起作用,但在第二个代码中不起作用?如果我做错了,第一个代码和第二个代码有什么区别(注意:第一个和第二个代码使用同一个文件)。
【问题讨论】:
-
这不是列表推导的好用例。在您的第一个代码中,您仅在一个 for 循环中填充了所有列表。在第二个和第三个代码中,您需要三个列表推导,相当于三个 for 循环。
标签: python json loops csv list-comprehension