从字典(Python)引用和打印值
下面我的代码查找用户输入的地区所在的城市及其邮政编码。我已经将我的数据放入字典,我想知道如何修改代码以接收用户的邮政编码,并输出其所在的地区和城市 代码:从字典(Python)引用和打印值,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,下面我的代码查找用户输入的地区所在的城市及其邮政编码。我已经将我的数据放入字典,我想知道如何修改代码以接收用户的邮政编码,并输出其所在的地区和城市 代码: 使用“zipcode[city]”可以获得整本词典。我猜用户应该以字符串的形式输入地区 for city in zipcode: if district in list(zipcode[city].keys()): print(city,zipcode[city][district]) 列表(zipcode[city
使用“zipcode[city]”可以获得整本词典。我猜用户应该以字符串的形式输入地区
for city in zipcode:
if district in list(zipcode[city].keys()):
print(city,zipcode[city][district])
列表(zipcode[city].keys())提供城市字典中的所有密钥,您可以根据这些密钥检查地区。对于Python2.x,只需zipcode[city].keys()即可获得列表 只需使用dict理解转换
zipcode
,这样它就可以由zipcodes索引:
{z: (c, d) for c, i in zipcode.items() for d, z in i.items()}
这将产生:
{100: ('Trap City', 'C District'), 103: ('Trap City', 'D District'), 104: ('Trap City', 'E District'), 105: ('Trap City', 'S District'), 200: ('Zap City', 'R District'), 201: ('Zap City', 'D District'), 207: ('Los City', 'X District'), 208: ('Los City', 'Y District')}
有了这个新的dict,你可以很容易地从一个给定的zipcode中获得城市和地区。这个问题可以用多种方法来解决,但是我制作了
get\u district\u and\u city()
函数,它有一个参数postal\u code
,并返回带有district
和city
的元组:
zipcode = {"Trap City":{"C District": 100, "D District": 103, "E District": 104, "S District": 105},
"Zap City":{"R District": 200, "D District": 201},
"Los City": {"X District": 207, "Y District": 208}}
def get_disctrict_and_city(postal_code, data=zipcode):
for city, districts in data.items():
for district, code in districts.items():
if code == postal_code:
return district, city
postal_code=int(input('Enter postal code: '))
district, city = get_disctrict_and_city(postal_code)
print('District = {} City = {}'.format(district, city))
输出:
Enter postal code: 100
District = C District City = Trap City
我对python了解不多,但你可以用谷歌搜索一下。我会像你在R里那样做。通过谷歌搜索,我得出了以下结论:
import pandas as pd
def get_city_dist(num,dicts):
s = pd.DataFrame(dicts)==num
m = list(s.columns[s.any()]) + list(s.index[s.T.any()])
return dict(zip(["city","District"], m))
get_dis_cit(103,zipcode)
Out[122]: {'city': 'Trap City', 'District': 'D District'}
get_dis_cit(100,zipcode)
Out[123]: {'city': 'Trap City', 'District': 'C District'}
get_dis_cit(200,zipcode)
Out[124]: {'city': 'Zap City', 'District': 'R District'}
get_dis_cit(208,zipcode)
Out[125]: {'city': 'Los City', 'District': 'Y District'}
由于D区存在于两个字典中,我猜您实际上不希望用户输入字符串,而是103这样的整数,在这种情况下,您必须对照列表(zipcode[city].values())检查可能的重复项,而不是将nums作为参数,您可以在函数中将其作为用户输入
import pandas as pd
def get_city_dist(num,dicts):
s = pd.DataFrame(dicts)==num
m = list(s.columns[s.any()]) + list(s.index[s.T.any()])
return dict(zip(["city","District"], m))
get_dis_cit(103,zipcode)
Out[122]: {'city': 'Trap City', 'District': 'D District'}
get_dis_cit(100,zipcode)
Out[123]: {'city': 'Trap City', 'District': 'C District'}
get_dis_cit(200,zipcode)
Out[124]: {'city': 'Zap City', 'District': 'R District'}
get_dis_cit(208,zipcode)
Out[125]: {'city': 'Los City', 'District': 'Y District'}