Python 如何从嵌套字典中获取值?

Python 如何从嵌套字典中获取值?,python,Python,我有以下资料: zipcode = {"country_1": {"city_1": 100, "city_2": 103, "city_3": 104}, "country_2": {"city_4": 208, "city_5": 220, "city_6": 221}

我有以下资料:

zipcode = {"country_1": 
               {"city_1": 100, 
                "city_2": 103, 
                "city_3": 104},
           "country_2": 
               {"city_4": 208, 
                "city_5": 220, 
                "city_6": 221}
           }
如何编写以下三个函数:

  • 如果我输入
    country\u 1
    ,它将打印该国家城市的所有
    zipcode
  • 如果我输入任何
    city
    ,它将打印相应的
    zipcode
  • 反之亦然(输入
    zipcode
    ,返回
    city

您想要一个兼有这两种功能的功能吗?这可能不是最好的主意!这正是您想要的:

zipcode = {"country_1": {"city_1": 100, "city_2": 103, "city_3": 104},"country_2": {"city_1": 208, "city_2": 220, "city_3": 221}}

def get_zipcode(word):
    if word in zipcode:
        return zipcode[word].values()

    for data in zipcode.values():
        if word in data:
            return data[word]

    return None
如果我输入country_1,它将打印该国家所有城市的zipcode

如果我输入任何城市,它将打印相应的zipcode

我把输出作为一个列表放在这里,因为有许多城市与其他国家的城市同名。(例如,
Syracuse
Rome
)因此,这允许找到多个zipcode

反之亦然

对于后者,您可能想知道您所在的国家是哪个城市。在这种情况下:

>>> z=100; ["{}, {}".format(k, c) for c, d in zipcode.items() for k in d if d.get(k)==z]
['city_1, country_1']
补遗 评论中的以下代码存在问题:

z=input('please enter zipcode:')
print( [zipcode.keys() for zipcode.keys() in zipcode for zipcode in zipcode.values() if zipcode.get()==z] )
让我们从第一行开始:

>>> z=input('please enter zipcode:')
please enter zipcode:100
现在,让我们显示
z
,看看我们有什么:

>>> z
'100'
如您所见,
z
是一个字符串。但是,从上面可以看到变量
zipcode
中的邮政编码是整数。在将
z
zipcode
中的任何内容匹配之前,我们必须将其设置为整数。下面使用
int
函数来执行此操作:

>>> z=int(input('please enter zipcode:'))
please enter zipcode:100
>>> z
100
至于第二行,
zipcode.keys()
是一个函数调用,但它用于需要变量的地方。同样,zipcode.values()中的zipcode的
zipcode
视为两个不同的东西。解决这些问题将产生:

>>> print( [city for country in zipcode.values() for city in country if country.get(city)==z] )
['city_1']

试试这个,有点棘手,但它能满足你的要求(所有3合1):) 假设每个国家名称、城市名称和邮政编码都是唯一的,
get\u value()
将向其输入返回相应的值

按国家名称:

>>> get_value('country_1', zipcode)
[103, 104, 100]
或按城市名称:

>>> get_value('city_3', zipcode)
104
或者通过zipcode:

>>> get_value('100', zipcode)
'city_1'
zipcode应该是嵌套字典:

def get_value(c, zipcode):

    if c in zipcode.keys():
        return zipcode[c].values()
    else:
        for d in zipcode.values():
            for k, v in d.iteritems():
                if c == k:
                    return d[k]
                try:
                    int(c) == v
                    return k
                except ValueError:
                    continue
    return None

谢谢如何在其中插入输入函数?@EricChen喜欢
get_zipcode('country_1')
get_zipcode('city_2')
?嗨,我想知道如何在套件
word=raw\u input('请键入国家或城市名称:')中使用输入函数=>word input('请键入国家名称:')
谢谢!我编辑了国家2至4、5和6的城市。@EricChen我已经更新了新输入数据的答案。您好,您能进一步说明第3部分(输入邮政编码,然后返回值)吗?k代表什么?谢谢大家!
d
是一个国家的字典
k
是那个国家的一个城市。(我称之为
k
,因为社区有“键”和“值”,城市是国家词典中的“键”。)例如,
d.get(k)
在国家词典
d
中获取城市
k
的邮政编码。非常感谢您的帮助。我根据您的示例编写代码,但无法找出错误的地方:z=input('请输入zipcode:')、print([zipcode.keys()表示zipcode.keys()表示zipcode.values()中的zipcode表示zipcode.values()表示zipcode.get()==z]谢谢!我应该提到,我想编写三个函数来分别执行请求。
>>> get_value('city_3', zipcode)
104
>>> get_value('100', zipcode)
'city_1'
def get_value(c, zipcode):

    if c in zipcode.keys():
        return zipcode[c].values()
    else:
        for d in zipcode.values():
            for k, v in d.iteritems():
                if c == k:
                    return d[k]
                try:
                    int(c) == v
                    return k
                except ValueError:
                    continue
    return None