我有以下信息:
zipcode = {"country_1":
{"city_1": 100,
"city_2": 103,
"city_3": 104},
"country_2":
{"city_4": 208,
"city_5": 220,
"city_6": 221}
}
如何编写三个函数:
country_1
,它会打印该国家/地区的所有zipcode
个城市? city
,则会打印相应的zipcode
zipcode
,返回city
)答案 0 :(得分:1)
如果我输入country_1,它会打印该国家/地区城市的所有邮政编码吗?
>>> zipcode = {'country_1': {'city_2': 103, 'city_3': 104, 'city_1': 100}, 'country_2': {'city_4': 208, 'city_6': 221, 'city_5': 220}}
>>> c = "country_1"; list(zipcode[c].values())
[103, 104, 100]
如果我输入任何城市,它将打印相应的邮政编码
>>> c = "city_1"; [d[c] for d in zipcode.values() if d.get(c)]
[100]
我将输出作为列表留在此处,因为有许多城市与其他国家/地区的城市共享名称。 (例如,Syracuse
或Rome
。)因此,这样可以找到多个邮政编码。
反之亦然?
>>> z=100; [k for d in zipcode.values() for k in d if d.get(k)==z]
['city_1']
对于后者,您可能想知道city_1
所在的国家/地区。在这种情况下:
>>> 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()
对于第二行,for zipcode in zipcode.values()
是函数调用,但它用于需要变量的位置。同样,zipcode
将>>> print( [city for country in zipcode.values() for city in country if country.get(city)==z] )
['city_1']
视为两个不同的事物。修复这些问题会产生:
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
答案 1 :(得分:0)
你想要一个兼具两种功能的功能吗?这可能不是最好的主意!这样做你想要的:
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
答案 2 :(得分:0)
尝试这个,有点棘手,但它会做什么(所有3合1)你要求:)
假设每个国家/地区名称,城市名称和邮政编码都是唯一的,get_value()
会将相应的值返回到其输入。
按国家/地区名称:
>>> get_value('country_1', zipcode)
[103, 104, 100]
或按城市名称:
>>> get_value('city_3', zipcode)
104
或通过邮政编码:
>>> 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