如果上一行中已存在数据,如何跳过文件行?

时间:2018-03-28 18:24:06

标签: python for-loop

接收打开的csv文件的Heres函数(open_file())。对于每一行,我做了一个for循环来遍历每一行。对于每个州,为州名创建一个关键字典,同时将其作为列表中的值的城市和日期。但是,如果城市和日期相同,请跳过该行。

继承人csv文件:

 State      City      Date
Michigan    Detroit   3/31/00
Michigan    Detroit   3/31/00
Michigan    Detroit   3/31/00
Michigan    Detroit   4/1/00
Michigan    Detroit   4/2/00

到目前为止我的代码:

def read_file(fp):

reader = csv.reader(fp)
state = {}
for line in reader:
    city = ''
    date = ''
    if line[1] != city:
        city = line[1]
        if line[2] != date:
            date = line[2]
print(state)

正确的输出:

  state = {'Michigan': [['Detroit', '3/31/2000'], 
          ['Detroit', '4/1/2000'],['Detroit', '4/2/2000']]

2 个答案:

答案 0 :(得分:0)

  1. 以其他方式摄取您的输入:制作dict键city + '|' + date。这将自动消除任何重复。你不要跳过这条线;你只是让它覆盖(相同的)现有的dict条目。
  2. 反转词典(切换值和键)
  3. 执行此撤消时,split垂直条处的新值。

答案 1 :(得分:0)

如果内存不是限制问题,请创建一个集以跟踪发生的元素。这不会阻止您保持元素的顺序,因为您不会更改添加到列表的方式。 if element in set:只需continue