如何读取 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 字典的创建。唯一的麻烦是您之后可能需要将其所有值转换为 lists,但这可以用一行代码完成。

我的意思是:

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()}