2015-05-06 19 views
0

我已將CSV文件讀取到字典中,其中code3是關鍵字。然後我使用def findAirportCODE(self, code3):來獲取密鑰並打印出與密鑰相關的數據。 code3通過a.findAirportCODE(input('enter a code').upper())中的輸入進入。使用鍵檢索字典中的數據

import csv 

class Airport: 

    def __init__(self, airportname='', cityname='', countryname='', code3='', lat=0, long=0): 

     self.airportname=airportname 
     self.cityname=cityname 
     self.countryname=countryname 
     self.code3=code3 
     self.lat=lat 
     self.long=long 

class TravelLookUp: 
    def dictAirport(self,filename): 
     self.__airportDict={} 

     f=open(filename, encoding="utf8") 
     csvreader = csv.reader(f) 
     for row in csvreader: 
      airport=Airport(row[1], row[2], row[3], row[4], row[6], row[7]) 
      self.__airportDict[row[4]]=airport 
      #for keys, values in self.__airportDict.items(): 
       #print ('[', keys, ':', values.airportname,']') 


    def findAirportCODE(self, code3): 
     print(self.__airportDict[code3]) 

air=Airport() 
a=TravelLookUp() 
a.dictAirport('airport.csv') 
a.findAirportCODE(input('enter a code').upper()) 

當我運行此程序它顯示:

enter a code: jfk 
<__main__.Airport object at 0x02B826F0> 
enter a code: dub 
<__main__.Airport object at 0x02ABB5F0> 

程序從CSV文件讀出時予輸入一個不同的code3它顯示如上述不同的代碼作爲。

的CSV文件,它是由被格式化這樣寫着:

3796,Kapalua,Lahania-kapalua,United States,JHM,PHJH,20.962936,-156.673031,256,-10,N,Pacific/Honolulu 
3797,John F Kennedy Intl,New York,United States,JFK,KJFK,40.639751,-73.778925,13,-5,A,America/New_York 
3798,Homestead Arb,Homestead,United States,HST,KHST,25.48855,-80.383567,6,-5,A,America/New_York 
3799,Riverside Muni,Riverside,United States,RAL,KRAL,33.951875,-117.445103,818,-8,A,America/Los_Angeles 

爲什麼我得到這個消息,我怎麼把它打印出來又名與字典的鍵關聯的數據正確的信息?

+0

你使用Python 2還是Python 3?如果你使用的是Python 2,那麼你應該使用「新風格」的對象,並像這樣聲明你的類:'class Airport(object):'和'class TravelLookUp(object):'。注意將'object'聲明爲父類的附加'(object)'。 – b4hand

回答

1

只需重寫Airport類的特殊__str__ method,使其返回字符串形式的信息你要。

您當前正在打印該對象,而您看到的字符串是用Python表示對象的默認方式。它看起來很有趣,但它會告訴你對象的類型及其唯一標識符。

這些標識符在不同的運行中與您所觀察到的不同,因爲Python不能保證它們在不同的運行中是相同的。

你問如何實現__str__,所以這裏有一個例子:

# inside your existing class Airport definition 
    def __str__(self): 
     return '%s in %s, %s' % (self.airportname, self.cityname, self.countryname) 

你可以得到花哨或像你一樣簡單。

1

您的機場沒有__str__方法,因此Python不知道如何打印出來。

實施__str__,或交替使用collections.namedtuple更換您的機場類來獲得自動打印和一些有用的功能:

from collections import namedtuple 
Airport = namedtuple('Airport', 'airportname cityname countryname code3 lat long') 
+0

當你說實現一個__str__方法時,這是否意味着寫一個def __str __(self):,如果是的話,當我打算加入它?把它返還? – Albi

+0

返回機場的合適字符串版本。查看Python文檔。 – nneonneo

0

我會推薦一個列表作爲你的字典值而不是這個簡單例子的一個對象。如果您打算使用列表中的值,則可以在導入過程中始終投射這些值,以確保您獲得正確的類型。爲了解決在列表中輸入的問題,您還可以使用json爲您提供一些類型信息。