从字典(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'}