我想要一个城市列表和一个邮政编码列表,其中的位置对应(如果NYC在城市列表中排在第一位,NYS的代码将首先在代码列表中)。说我想将x
设置为纽约市的邮政编码。我知道可以这样做:
y = citylist.index('New York')
x = postcodelist[y]
xstring = str(x)
但是,有没有办法将列表等同并在一行中执行此操作,例如:
x = postcodelist.citylist.index('New York').string
答案 0 :(得分:7)
如果我理解正确,您有两个并行列表,您希望将其视为一个键列表和一个值列表。如果是这样,您可以执行以下操作:
>>> places = ['New York', 'Texas', 'California']
>>> zips = ['01010', '70707', '90909']
>>> place_zip_map = dict(zip(places, zips))
>>> place_zip_map['New York']
'01010'
基本上,将您的地点列表作为您的密钥以及您的拉链/邮政编码列表作为您的值,使用zip
将它们组合成一系列键值对,然后使用{{1}创建将它们相互映射的字典。
编辑:如果您想创建字典,另一种将邮政编码/拉链映射到您可以使用相同流程的地方,只需翻转{{{ 1}}。如果你想要一个可以查找的结构,你可以将两个结果的dicts组合成一个。只要没有与邮政编码同名的地方,就不应该发生冲突。
答案 1 :(得分: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'
答案 2 :(得分:1)
如果您按正确的顺序生成了列表,则可以使用zip
一起迭代这些列表:
for city, zipcode in zip(citylist, postcodelist):
print city, zipcode
答案 3 :(得分:0)
你的意思是这样吗?
x = str(postcodelist[citylist.index('New York')])
答案 4 :(得分:0)
str(postcodelist[citylist.index('New York')])
但是,我会注意到你可能想要考虑不使用这样的并行列表。通常最好使用具有'name'和'zip'属性的对象列表。