2012-08-03 68 views
3

我想要列出城市和郵政編碼列表,並且對應的位置(如果紐約市首先在城市列表中,紐約州的代碼將首先在代碼列表中)。假設我想將x設置爲NYC的郵政編碼。我知道這是可能做到這一點:列表之間交換的Pythonic方式?

y = citylist.index('New York') 
x = postcodelist[y] 
xstring = str(x) 

但是,有沒有辦法等同名單,並在一行做到這一點,如:

x = postcodelist.citylist.index('New York').string 
+3

爲什麼不使用雙向詞典嗎? 'd = {'紐約':00101,00101:'紐約'}'。查找會容易很多... – mgilson 2012-08-03 19:58:21

回答

7

如果我理解正確的話,你必須要爲處理兩個平行的列表基本上是一個鍵列表和值列表。如果是這樣,你可以這樣做以下:

>>> places = ['New York', 'Texas', 'California'] 
>>> zips = ['01010', '70707', '90909'] 
>>> place_zip_map = dict(zip(places, zips)) 
>>> place_zip_map['New York'] 
'01010' 

基本上,把你的地方作爲你的鑰匙,你的拉鍊/郵政編碼作爲值列表列表,使用zip將它們組合成鍵的順序 - 值對,然後使用dict創建將它們映射到另一個的詞典。

編輯:如果你想創建一個字典的其他方式郵政編碼/拉鍊映射到你可以使用相同的過程的地方,只需撥動你zip列表的順序。如果你想要一個可以查看的結構,那麼你可以將這兩個結果的結果合併成一個。只要沒有與郵政編碼同名的地方,就不應有衝突。

+2

也許你應該在你的地方使用''Austin''和''Sacremento''來代替......:^)。 – mgilson 2012-08-03 20:00:24

0

你的意思是這樣嗎?

x = str(postcodelist[citylist.index('New York')]) 
1

如果你已經在正確的順序,你可以使用zip通過他們在一起,迭代產生的名單:

for city, zipcode in zip(citylist, postcodelist): 
    print city, zipcode 
0
str(postcodelist[citylist.index('New York')]) 

但是,我會注意到你可能想要考慮不使用這樣的並行列表。通常更好的辦法是使用'name'和'zip'屬性的對象列表。

4

你可以使用pyzipcode

>>> from pyzipcode import ZipCodeDatabase 
>>> zcdb = ZipCodeDatabase() 
>>> zcdb['10001'].city 
u'New York' 
>>> len(zcdb.find_zip(city="New York")) 
167 
>>> zcdb.find_zip(city="New York")[0].zip 
u'10001' 
>>> zcdb.find_zip(city="New York")[1].zip 
u'10002' 
>>> zcdb.find_zip(city="New York")[2].zip 
u'10003' 
相關問題