1 代码: 2 dic_china = { 3 "直辖市":{ 4 "北京市":["东城区","西城区","崇文区","宣武区","朝阳区","海淀区","丰台区", 5 "石景山区","门头沟区","房山区","通州区","顺义区","昌平区","大兴区", 6 "怀柔区","平谷区","延庆县","密云县",], 8 }, 9 "省":{ 10 "浙江省":{ 11 "杭州市":["拱墅区","上城区","下城区","江干区","西湖区","滨江区","萧山区","余杭区","建德市","富阳市", 12 "临安市","桐庐县","淳安县"], 13 "宁波市":["海曙区","江东区","江北区","北仑区","镇海区","鄞州区","余姚市","慈溪市","奉化市","象山县", 14 "宁海县"], 15 "温州市":["鹿城区","龙湾区","瓯海区","瑞安市","乐清市","洞头县","永嘉县","平阳县","苍南县","文成县", 16 "泰顺县"], 17 "嘉兴市":["南湖区","秀洲区","海宁市","平湖市","桐乡市","嘉善县","海盐县"], 18 "湖州市":["吴兴区","南浔区","德清县","长兴县","安吉县"], 19 "绍兴市":["越城区","诸暨市","上虞市","嵊州市","绍兴县","新昌县"], 20 "金华市":["婺城区","金东区","兰溪市","义乌市","东阳市","永康市","武义县","浦江县","磐安县"], 21 }, 22 } 23 } 24 25 print('欢迎使用中国省市查询工具'.center(30,'-')) 26 while True: 27 #---------遍历字典china,并编号输出城市分类信息------ 28 for i,j in enumerate(dic_china,1): 29 print(i,j) 30 classify_num = input('请选择想要查看的城市分类的编号[退出:q]:') 31 #---------判断输入编号是否正确---------- 32 if classify_num.isdigit(): 33 classify_num = int(classify_num) 34 if 1 <= classify_num <= len(dic_china): 35 #---------将客户选择的类别的城市信息存入新的字典中---------- 36 province_municipality_list = list(dic_china.keys()) 37 #---------判断客户是选择额直辖市类------- 38 if province_municipality_list[classify_num-1] == '直辖市': 39 dic_municipality = dic_china[province_municipality_list[classify_num-1]] 40 print(''.center(50, '-')) 41 for i, j in enumerate(dic_municipality, 1): 42 print(i, j) 43 municipality_num = input('请选择想要查看的直辖市的编号[返回上一级菜单:q]:') 44 #---------判断输入编号是否正确---------- 45 if municipality_num.isdigit(): 46 municipality_num = int(municipality_num) 47 if 1 <= municipality_num <= len(dic_municipality): 48 municipality_list = list(dic_municipality.keys()) 49 county_list = dic_municipality[municipality_list[municipality_num-1]] 50 print('以下是该直辖市下所有区的信息:') 51 print(county_list) 52 elif municipality_num.upper() == 'Q': 53 print(''.center(50,'-')) 54 else: 55 print('输入错误,请重新输入!!') 56 else: 57 dic_province = dic_china[province_municipality_list[classify_num-1]] 58 print(''.center(50, '-')) 59 #---------遍历字典dic_Province,并编号输出省级城市信息--------- 60 for i, j in enumerate(dic_province, 1): 61 print(i, j) 62 province_num = input('请选择想要查看的省的编号[返回上一级菜单:q]:') 63 # ---------判断输入编号是否正确---------- 64 if province_num.isdigit(): 65 province_num = int(province_num) 66 if 1<= province_num <= len(dic_province): 67 # ---------将客户选择的市信息存入新的字典中---------- 68 province_list = list(dic_province.keys()) 69 dic_city = dic_province[province_list[province_num-1]] 70 print(''.center(50, '-')) 71 for i, j in enumerate(dic_city, 1): 72 print(i, j) 73 city_num = input('请选择想要查看的市的编号[返回上一级菜单:q]:') 74 if city_num.isdigit(): 75 city_num = int(city_num) 76 if 1 <= city_num <= len(dic_city): 77 city_list = list(dic_city.key()) 78 79 elif province_num.upper() == 'Q': 80 print(''.center(50,'-')) 81 else: 82 print('输入错误,请重新输入!!') 83 else: 84 print('输入的编号不在城市分类的编号范围内,请重新输入!!') 85 elif classify_num.upper() == 'Q': 86 print('感谢您的使用!!') 87 else: 88 print('输入错误,请重新输入!!
问题:
代码中标红的位置,查询字典dic_city的key值存入city_list列表中,但是key方法无法使用,
提示:Unresolved attribute reference 'key' for class
(标红的代码,key少打了一个s,但是问题没有变,key方法不能使用)
小白初学python第6天,不知道这里为什么不能用??烦请园区大神们为我解惑
建议打印一下 dic_city
的类型信息
已经打印过了,时dict类型的
所以我才觉得奇怪的,明明是dict类型,是不是我最开始建的字典china有问题,
直辖市分类--->北京--->列表,
而省分类---->浙江省---->市----->列表,
是不是这里有什么说法??
@Albert_learner: 那么那个里面的数据正确吗?
@生活还得继续: 数据是正确的,
存的是这些东西:
{
'杭州市': ['拱墅区', '上城区', '下城区', '江干区', '西湖区', '滨江区', '萧山区', '余杭区', '建德市', '富阳市', '临安市', '桐庐县', '淳安县'],
'宁波市': ['海曙区', '江东区', '江北区', '北仑区', '镇海区', '鄞州区', '余姚市', '慈溪市', '奉化市', '象山县', '宁海县'],
'温州市': ['鹿城区', '龙湾区', '瓯海区', '瑞安市', '乐清市', '洞头县', '永嘉县', '平阳县', '苍南县', '文成县', '泰顺县'],
'嘉兴市': ['南湖区', '秀洲区', '海宁市', '平湖市', '桐乡市', '嘉善县', '海盐县'],
'湖州市': ['吴兴区', '南浔区', '德清县', '长兴县', '安吉县'],
'绍兴市': ['越城区', '诸暨市', '上虞市', '嵊州市', '绍兴县', '新昌县'],
'金华市': ['婺城区', '金东区', '兰溪市', '义乌市', '东阳市', '永康市', '武义县', '浦江县', '磐安县'],
}
这个是dict类的,value存的是列表而已
@生活还得继续: 但是我用dic_city.key()这个方法取key值的时候报错
@Albert_learner: 认真看了一下,好像应该是dic_city.keys()?少了个s,这个报错一般都是方法名错误或不存在。。
@生活还得继续: 是的,我又仔细看了下自己的代码,真的是哎,写代码还是要小心
贴的代码排版很乱。不缩进格式不对应,都不想看代码了。。。。
额,我在pycharm上缩进时正常的这里我是直接复制粘贴的,可能有些地方缩进的长度变了,当时没有注意,sorry
看了园中别人写的三级菜单,对比了两个字典,发现一个问题(字典中的元素进行额简化处理)
正确的字典(别人的)
zone = {
'华北':{ '山东' : {'青岛' : ['四方'],}, },
'华南':{'江苏' : {'苏州' : ['沧浪'],},},
}
不算错误,但是不合理的字典(我的)
dic_china = {
"直辖市":{"北京市":["东城区",],},
"省":{"浙江省":{"杭州市":["拱墅区",],},}
}
可以看出来我的字典是
直辖市分类--->北京--->列表,
而省分类--->浙江省--->市--->列表,
如果拆分建立的话,一个属于二级,一个是三级,所以最后dic_city无法使用keys()方法,
至于原因,我猜测:这样建立的字典是属于二级的,而不是三级的,原理可能类似与水桶,由最短的一块决定能装多少水,所以{"杭州市":["拱墅区",],}这一整个都被python识别为一个value,所以最后不能用keys()方法。
ps:以上是我自己验证过了的,但是最后的原因是我自己猜测的,不知道正不正确,所以不要请看到的大神能解惑,和我一样是小白的看看就好,记住和我一样是小白的看看就好!!!!!!!!
下午又尝试了一下,发现直接输出dic_china['省']['浙江省'],输出结果为杭州市,即:我上午猜测{"杭州市":["拱墅区",],}被python识别为一个value的猜想又好像是错误的,真的是搞不懂啊,@dudu,大神知道具体的原因吗??
真烂, 浪费时间.