如何读取 CSV 文件以仅将最近的三个值放入字典中?
How can I read a CSV file to only get the most recent three values into a dictionary?
此代码从 CSV 文件中读取每一行。第一列是字典中的一个值。我想将键的值限制为三个(最近的三个值。)
for row in reader:
key = row[0]
if key in result:
# if the key is in dictionary
result[key].append(row[1])
# add what ever is in column 2 to that key
if len(result[key]) > 3:
# if the result is three !!
print ("too long")
lastThreeValues = (result[key][-3]).copy()
result[key].clear()
result[key] = (lastThreeValues)
else:
result[key] = [row[1]]
工作代码是这样的
reader = csv.reader(open("class1.csv"))
result = {}
for row in reader:
key = row[0]
if key in result:
result[key].append(row[1])
if len(result[key]) > 3:
result[key] = (result[key][-3:])
这比您实际需要的要复杂得多,您可以只使用切片来删除第一个元素。
>>> a
[0, 1, 2, 3]
>>> a = a[1:]
>>> a
[1, 2, 3]
我所做的只是告诉它从索引 1 到末尾将列表设置为等于自身。所以本质上就是删除列表的第一个元素,这是你最旧的值。
尽管正如 jonrsharpe 在评论中指出的那样,使用 [-3:] 更简洁,因为它字面意思是列表中的最后三个元素。
>>> a = a[-3:]
>>> a
[1, 2, 3]
您可以使用 collections.deque
来大大简化 results
字典的创建。唯一的麻烦是您之后可能需要将其所有值转换为 list
s,但这可以用一行代码完成。
我的意思是:
from collections import deque
MAXLEN = 3
for row in reader:
key = row[0]
if key in result:
result[key].append(row[1])
else:
result[key] = deque([row[1]], MAXLEN)
# convert result values into lists
result = {k: list(v) for k, v in result.iteritems()}
此代码从 CSV 文件中读取每一行。第一列是字典中的一个值。我想将键的值限制为三个(最近的三个值。)
for row in reader:
key = row[0]
if key in result:
# if the key is in dictionary
result[key].append(row[1])
# add what ever is in column 2 to that key
if len(result[key]) > 3:
# if the result is three !!
print ("too long")
lastThreeValues = (result[key][-3]).copy()
result[key].clear()
result[key] = (lastThreeValues)
else:
result[key] = [row[1]]
工作代码是这样的
reader = csv.reader(open("class1.csv"))
result = {}
for row in reader:
key = row[0]
if key in result:
result[key].append(row[1])
if len(result[key]) > 3:
result[key] = (result[key][-3:])
这比您实际需要的要复杂得多,您可以只使用切片来删除第一个元素。
>>> a
[0, 1, 2, 3]
>>> a = a[1:]
>>> a
[1, 2, 3]
我所做的只是告诉它从索引 1 到末尾将列表设置为等于自身。所以本质上就是删除列表的第一个元素,这是你最旧的值。
尽管正如 jonrsharpe 在评论中指出的那样,使用 [-3:] 更简洁,因为它字面意思是列表中的最后三个元素。
>>> a = a[-3:]
>>> a
[1, 2, 3]
您可以使用 collections.deque
来大大简化 results
字典的创建。唯一的麻烦是您之后可能需要将其所有值转换为 list
s,但这可以用一行代码完成。
我的意思是:
from collections import deque
MAXLEN = 3
for row in reader:
key = row[0]
if key in result:
result[key].append(row[1])
else:
result[key] = deque([row[1]], MAXLEN)
# convert result values into lists
result = {k: list(v) for k, v in result.iteritems()}