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