Ссылки и печать значений из словаря (Python)

Приведенный ниже код определяет, в каком городе расположен район, введенный пользователем, и его почтовый индекс. Я поместил свои данные в словарь и хочу знать, как я могу изменить код, чтобы получить почтовый индекс от пользователя и вывести район и город, в котором он расположен.

Код:

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])
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
169
4

Ответы 4

С почтовым индексом [город] вы получите весь словарь. Я предполагаю, что пользователь должен ввести район как строку?

for city in zipcode:
    if district in list(zipcode[city].keys()):
        print(city,zipcode[city][district])

список (почтовый индекс [город]. ключи ()) дает вам все ключи из словаря городов, по которым вы можете проверить район. Для Python 2.x это будет просто почтовый индекс [город] .keys (), чтобы получить список.

Поскольку D District существует в двух ваших словарях, я думаю, вы на самом деле не хотите, чтобы пользователь вводил строку, а целое число, например 103, в этом случае вам нужно будет проверить список (почтовый индекс [город]. значения ())

Bernhard 13.07.2018 08:53

Просто преобразуйте 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'}

Вместо того, чтобы использовать число в качестве аргумента, вы можете использовать его как пользовательский ввод в функции

Onyambu 13.07.2018 10:43

Другие вопросы по теме