学习内容:
《python编程:从入门到实践》
知识点:字典、键值对、嵌套
#练习6-11:城市
创建一个名为cities的字典,将三个城市名用作键。
对于每座城市,都创建一个字典,并在其中包含该城市所属的国家、
人口约数以及一个有关该城市的事实。在表示每座城市的字典中,
应包含country、population和fact等键。将每座城市的名字以及有关信息都打印出来。
PS:看我的问题请大佬们直接跳到问题部分,前面是笔记而已,感谢。
目录
我的代码:
cities = {
'beijing':{
'country':'China',
'population':'2.2trillion',
'fact':'中国首都,历史悠久,文化灿烂,世界文化遗产丰富'
},
'paris':{
'country':'Fracnce',
'population':'1.2trillion',
'fact':'法国首都,四大世界级城市之一'
},
'Akureyri':{
'country':'Iceland',
'population':'fifteen thousand',
'fact':'"北方之都",位于冰岛最北部埃亚峡湾尽头,地处北极圈边缘',
},
}
for city,summary in cities.items():
print(f"\n{city}")
for key,value in summary.items():
print(f"{city}属于{summary['country']}")
print(f"面积是{summary['population']}")
print(f"这里是{summary['fact']}")
结果如下:
另一种代码写法:
主要是把要用到的值,用变量赋值 变量=的方式,赋值后打印
赋值的方法似乎更清晰。
for city,summary in cities.items():
print(f"\n城市概述:{city}")
for key,value in summary.items():
country = summary['country']
population = summary['population']
fact = summary['fact']
print(f"属于:{country}")
print(f"人口是:{population}")
print(f"定位是:{fact}")
结果如下:
总结&问题:
- 以下是我在写代码中遗忘和出错的部分:
-
for city,summary in cities.items(): print(f"\n{city}") for key,value in summary.items(): print(cities[city]) print(cities.get(city)) print(city) print(f"{city}属于{value}")
结果是:
-
print(f"\n{city}")打印出的是第一行beijing
-
print(cities[city]) 打印出的是第二行,print(cities.get(city)) 打印出的是第三行,这两个结果是一样的,如最后一个红框。
-
这里的问题是提取了值,但没有单独每个信息进行区分,有很多字符是不需要的代码,这个是嵌套比较难的地方,容易错,但好在把beijing、paris、akureyri都打出来了;
-
下一步就是再把这个里面的提取出来,也就是用summary['country']、summary['population']、summary['fact']或者用赋值+summary['fact']取值法
-
这里出现{}是因为值是一个字典,自己会带{},和有的时候报错出现{}的处理方法是不一样的。
-
-
print(f"{city}属于{value}")打印出来是遍历三个值了,但是,属于不是符合每一个,所以需要改变。
-
最后改成如下:
for city,summary in cities.items(): print(f"\n{city}") for key,value in summary.items(): print(f"{city}属于{summary['country']}") print(f"人口是{summary['population']}") print(f"这里是{summary['fact']}")
-
-
- 两周不碰代码就不会了,很多规则会记不清,要重新摸索
- 这个案例里面,键值对的结构一样,和键值对分别代表不同信息的获取方式不一样,嵌套中就是用这样的方式,
- 第一个字典所有键值对都是——城市:城市信息,
- 第二个字典的键值对是不同维度的信息——城市、人口、简介
我的问题是怎么去除3遍的结果,我尝试了很多了
cities = {
'beijing':{
'country':'China',
'population':'2.2trillion',
'fact':'中国首都,历史悠久,文化灿烂,世界文化遗产丰富'
},
'paris':{
'country':'Fracnce',
'population':'1.2trillion',
'fact':'法国首都,四大世界级城市之一'
},
'Akureyri':{
'country':'Iceland',
'population':'fifteen thousand',
'fact':'"北方之都",位于冰岛最北部埃亚峡湾尽头,地处北极圈边缘',
},
}
for city,summary in cities.items():
print(f"\n{city}")
for key in set(summary.keys()):
print(f"属于{summary['country']}")
结果是:
- 这个代码中,我去掉了最后一行print()里面的{city}减少一个变量,减少了一个影响因素;
- for key in set(summary.keys()): 这一部分,把items的影响去除了,改成了keys(),实际这个也是循环的作用,按理说结果是取值,应该是只有一个france,为了避免这种情况,我还加了set()也没有用,所以不知道怎么处理了。不知道大佬们会怎么处理?感谢。