Приведенный ниже код определяет, в каком городе расположен район, введенный пользователем, и его почтовый индекс. Я поместил свои данные в словарь и хочу знать, как я могу изменить код, чтобы получить почтовый индекс от пользователя и вывести район и город, в котором он расположен.
Код:
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
}
}
district=input('Enter your district: ')
for city in zipcode:
if district in zipcode[city]:
print(city,zipcode[city][district])






С почтовым индексом [город] вы получите весь словарь. Я предполагаю, что пользователь должен ввести район как строку?
for city in zipcode:
if district in list(zipcode[city].keys()):
print(city,zipcode[city][district])
список (почтовый индекс [город]. ключи ()) дает вам все ключи из словаря городов, по которым вы можете проверить район. Для Python 2.x это будет просто почтовый индекс [город] .keys (), чтобы получить список.
Поскольку D District существует в двух ваших словарях, я думаю, вы на самом деле не хотите, чтобы пользователь вводил строку, а целое число, например 103, в этом случае вам нужно будет проверить список (почтовый индекс [город]. значения ())
Просто преобразуйте zipcode с пониманием dict, чтобы вместо этого он индексировался почтовыми индексами:
{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 вы можете легко получить город и район по заданному почтовому индексу.
Эта проблема может быть решена несколькими способами, но я сделал функцию get_disctrict_and_city(), которая имеет один параметр postal_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
Я не очень разбираюсь в питоне, но вы можете это погуглить. Я постараюсь сделать это так, как будто вы делаете это в R. Путем поиска в Google я пришел к следующему:
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'}
Вместо того, чтобы использовать число в качестве аргумента, вы можете использовать его как пользовательский ввод в функции
Возможный дубликат Поиск значений из словаря с помощью пользовательского ввода