3

我想要一个城市列表和一个邮政编码列表,以及对应的位置(如果纽约市在城市列表中排名第一,则纽约州的代码将在代码列表中排名第一)。假设我想设置x为纽约市的邮政编码。我知道可以这样做:

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

但是,有没有一种方法可以使列表相等并在一行中执行此操作,例如:

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

5 回答 5

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. 然后,如果您想要一个可以查找的结构,则可以将两个结果字典合并为一个。只要没有与邮政编码同名的地方,就不应该发生冲突。

于 2012-08-03T19:59:17.100 回答
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'
于 2012-08-03T20:04:45.817 回答
1

如果您以正确的顺序生成列表,您可以使用zip它们一起迭代它们:

for city, zipcode in zip(citylist, postcodelist):
  print city, zipcode
于 2012-08-03T19:59:09.660 回答
0

你的意思是这样吗?

x = str(postcodelist[citylist.index('New York')])
于 2012-08-03T19:58:50.733 回答
0
str(postcodelist[citylist.index('New York')])

但是,我会注意到您可能要考虑不使用这样的并行列表。通常最好有一个带有“name”和“zip”属性的对象列表。

于 2012-08-03T19:59:49.503 回答