Python 如何读取CSV文件以仅将最近的三个值输入字典?

Python 如何读取CSV文件以仅将最近的三个值输入字典?,python,dictionary,key,Python,Dictionary,Key,此代码读取CSV文件中的每一行。第一列是字典中的一个值。我想将键的值限制为三个(使用最近的三个值) 工作代码是这样的 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:

此代码读取CSV文件中的每一行。第一列是字典中的一个值。我想将键的值限制为三个(使用最近的三个值)

工作代码是这样的

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到末尾相等。本质上,这就是删掉列表中的第一个元素,这是最古老的值

尽管正如Jornsharpe在评论中指出的那样,使用[-3:]更为简洁,因为它字面上的意思是列表中的最后三个元素

>>> a = a[-3:]
>>> a
[1, 2, 3]
您可以使用a来大大简化
结果
字典的创建。唯一复杂的是,您可能需要在之后将其所有值转换为
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()}

对于“最后三个”,a[-3://code>是最正确的。我使用[1:]是因为他们一次只添加一个,但我会在你的答案中添加一个更有力的答案。@JornSharpe我编辑了我的代码并添加了result[key]=key[-3:]但不是将最后三个值保存到键中,而是将键的最后三个字符保存为一个字符串?@Giraffcoder这是因为你正在分割键,不是价值。想想看@jonrsharpe我不知道什么是切片,我对python也没有什么经验,你能解释一下我到底需要做什么吗?
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()}