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

时间:2015-05-07 09:46:04

标签: python dictionary key

此代码从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:])

2 个答案:

答案 0 :(得分:1)

这比实际需要的要复杂得多,你可以使用切片来删除第一个元素。

>>> a
[0, 1, 2, 3]
>>> a = a[1:]
>>> a
[1, 2, 3]

我所做的就是告诉它将列表设置为从索引1到结尾等于自己。所以基本上就是切掉列表的第一个元素,这是你最早的价值。

虽然jonrsharpe在评论中指出,使用[-3:]更整洁,因为它字面意思是列表中的最后三个元素。

>>> a = a[-3:]
>>> a
[1, 2, 3]

答案 1 :(得分:0)

您可以使用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()}