从类变量

时间:2016-04-27 16:58:44

标签: python class dictionary attributes key

我对python非常陌生,并且在从类的属性中删除重复值时遇到了一些麻烦(我认为这是正确的术语)。

具体来说,我想删除同年的每个值。我应该注意,我只打印前四个值并搜索前四个值。属性中的数据实际上是以Yearmonthday格式(例如:19070101是1月1日的1907年)。

无论如何,这是我的代码:

import csv
import os

class Datatype:
    'Data from the weather station'
    def __init__ (self, inputline):
        [   self.DATE,
            self.PRCP] = inputline.split(',')


filename ='LAWe.txt'
LAWd = open(filename, 'r')
LAWefile = LAWd.read()
LAWd.close()

'Recognize the line endings for MS-DOS, UNIX, and Mac and apply the .split() method to the string wholeFile'
if '\r\n' in LAWefile:
    filedat = LAWefile.split('\r\n')        # the split method, applied to a string, produces a list
elif '\r' in LAWefile:
    filedat = LAWefile.split('\r')
else:
    filedat = LAWefile.split('\n')


collection = dict()
date= dict()
for thisline in filedat:
    thispcp = Datatype(thisline)                 # here is where the Datatype object is created (running the __init__ function)
    collection[thispcp.DATE] = thispcp        # the dictionary will be keyed by the ID attribute
for thisID in collection.keys():
    studyPRP = collection[thisID]   
    if studyPRP.DATE.isdigit():
        list(studyPRP.DATE)         
        if len(date[studyPRP.DATE][0:4]):
            pass                           #if year is seen once, then skip and go to next value in attribute
        else:
            print studyPRP.DATE[0:4]        #print value in this case the year)
            date[studyPRP.DATE]=studyPRP.DATE[0:4]  

我收到了这个错误:

追踪(最近一次通话):   文件" project.py",第61行,in     如果len(日期[studyPRP.DATE] [0:4]): KeyError:' 19770509'

一个关键错误(这意味着一个值不在列表中?但是它适用于我的数据)可以通过使用set函数来修复(或者我已经读过),但我有30,000个我正在处理的信息,似乎你必须手动输入该信息,这样我就无法选择。

任何帮助都将不胜感激

很抱歉,如果这是令人困惑或荒谬的,因为我对python非常陌生。

2 个答案:

答案 0 :(得分:0)

替换此

if len(date[studyPRP.DATE][0:4])

由此

if len(date[studyPRP.DATE[0:4]]):

说明:

  • 在第一行中,您选择整个日期作为日期的第一个条目中的键KeyError: '19770509'
  • 在更正中,您将在字典中发送日期(年份)的前4个字符

答案 1 :(得分:0)

不知道你到底想要什么。我会回复,因为我可以帮助你解决问题。

您的错误是因为您在添加之前在data访问了您的年份。

此外,您要添加到收藏中的内容就像

{
    <object>.DATE: <object>
}

我不知道你需要什么。您的下for loop可以写成:

for thisID in collection:
    if thisID.isdigit():
        if thisID[0:4] in date and len(date[thisID[0:4]]):
            #if year is seen once, then skip and go to next 
            # value in attribute
            pass
        else:
            print thisID[0:4]        #print value in this case the year)
            date[thisID[0:4]]=thisID[0:4]

请注意,studyPRP.DATEthisID相同。