第6章 字典
字典用于将相关信息关联起来。理解字典后可以为对象建模,例如一个人及其相关信息、一件事物及其相关信息等。
6.1 简单的字典示例
教程中的例子我一般都不太喜欢,可能是不符合国情?哈哈哈。所以还是用自己习惯的东西来示例。来看下面这个简单的字典示例,它存储了1号水晶虾的颜色和月龄:
shuijingxia01 = {'color':'red','age':4}
print(f"1号水晶虾的颜色:{shuijingxia01['color']}")
print(f"1号水晶虾的月龄:{shuijingxia01['age']}")
当访问其中的’color’和’age’时,返回的是他们关联的值。
6.2 使用字典
在Python中,字典(dictionary)是一系列的键值对(key-balue pair)。每个键都与一个值关联,可以使用键来访问与之关联的值。值可以是数、字符串、列表,乃至另一个字典,也就是任意对象都可作为值,一个字典可以包含任意多个键值对。
在Python中,字典用花括号{}
来包围,每个键值对之间用逗号,
分割,而键和值之间用冒号:
进行关联。基本语法如下:
字典名 = { 键1 : 值1 , 键2 : 值2 , ... 键n : 值n}
6.2.1 访问字典中的值
要访问字典的值,可以指定其字典名,并在后面的方括号[]
中指定键,即字典名[键]
;如上面水晶虾的字典中,当访问其字典的键'color'
时,会返回其关联的值'red'
。
当然,也可以通过访问,将字典中的值赋给其他变量,之后用作其他用途。如:
chengxia09 = shuijingxia01['age']
print(f"1号水晶虾已满{chengxia09}月龄,可以移入成虾组繁殖缸。\n")
6.2.2 添加键值对
字典像列表一样,是动态结构,可以随时增加键值对。添加时,用字典名后跟方括号中的键和与之关联的值即可。
字典名[新增键] = 新增键关联的值
例如,在1号水晶虾成年后,可以进入繁殖期,我会记录他的脱壳次数和繁殖次数。
shuijingxia01 = {'color':'red','age':4}
print(shuijingxia01)
shuijingxia01['tuoke'] = 1
shuijingxia01['fanzhi'] = 0
print(shuijingxia01)
上例通过添加,最终字典中会有4个键值对,并且是按照添加顺序保存的。输出整个字典可以看出其顺序。
6.2.3 创建一个空字典
实际应用中,往往先有一个空字典,然后根据需要再添加键值对。如上面这只水晶虾的例子,可以在其出生时先创建一个空字典,然后根据需要再增加键值对:
youxia01={}
youxia01['color'] = 'red'
youxia01['age'] = 0.1#初生的幼虾一般在3天左右才能看到它出来活动
print(youxia01)
6.2.4 修改字典中的值
随着幼虾长大,会需要修改其月龄。修改字典中的值,语法和添加键值对一样,只是这里的键是已有的。
youxia01['age'] = 0.2
youxia01['tichang'] = 4
print(youxia01)
假如我还想跟踪这只虾的成长速度,根据经验,我以虾亲代的表现给其子代在幼虾阶段的成长速度分为高、中、低三个级别,再根据其实际生长情况每周进行记录和比对。
youxia01={'color':'红白','age':0.2,'tichang':4,'zhangshi':'中'}
print(f"\n幼虾1号,当前月龄:{youxia01['age']}月\t理论体长:{youxia01['tichang']}mm\t生长速度:{youxia01['zhangshi']}")
if youxia01['zhangshi'] == '低' :
chengzhang = 8#假设每个月体长增加8mm
elif youxia01['zhangshi'] == '中' :
chengzhang = 10#假设每个月体长增加12mm
else:
chengzhang = 15#假设每个月体长增加20mm
youxia01['age']=0.5
#到半个月时,距上次记录的生长时间为0.3个月
shijian = 0.5 - 0.2
youxia01['tichang'] = youxia01['tichang'] + chengzhang * shijian
print(f"\n幼虾1号,当前月龄:{youxia01['age']}月\t理论体长:{youxia01['tichang']}mm\n")
因为水晶虾在不同阶段的体长变化速度不同,这样编写代码的好处是可以根据其所处的不同阶段,随时调整其生长速度,以估算其理论体长。
6.2.5 删除键值对
当水晶虾成长到一定阶段之后,其体长就基本不会再有变化了,脱壳只会让它越来越壮,这时,字典中关于成长速度的键值对就不再有意义,应该去除。不再需要的键值对用del
语句删除。
#del 字典名[键]
这里无需指定
值
,只要删除了键
,其关联值会被同步删除。当某个虾进入老年期时就删除其生长速度。如:
laoxia08={'color':'red','age':10,'tichang':41,'zhangshi':'低'}
print(laoxia08)
del laoxia08['zhangshi']
print(laoxia08)
删除针对指定的字典中的指定的键,不会影响其他键值对,且,删除的键值对是永久删除的,如仍有用途应先保留至别处再删除。
6.2.6 由类似对象组成的字典
字典不仅可以存储同一对象的不同信息,也适于类似对象的同一种信息。上面水晶虾的例子是一个字典存放一只虾的各种信息,下面这个,是存放家里所有人各自最爱吃的水果。
shuiguo={
'laopo':'xi gua',
'erzi':'mi hou tao',
'mama':'ju zi',
}
上面这样给每个键值对换行的方法可以让代码更整洁,而且,最后一个键值对后面是可以有逗号
,
的,可以为以后增加键值对提供便利。
将一系列对象的统一信息放在一个字典,可以通过指定对象名称,来访问其各自的信息。在print()
输出之前,先将字典中的值赋给变量zuiaide
,可以让print()函数的代码更简洁。
zuiaide = shuiguo['erzi'].title()
print(f"\n儿子最爱的水果是:{zuiaide}。\n")
使用这个方法可以访问字典中任何一个人获取其最爱的水果。
6.2.7 使用get()方法访问字典中的值
使用键来访问值的时候有个问题,就是当访问的键不存在时Python会报错,致使代码无法运行。而用get()
方法可以避免这个问题,因为get()方法允许带有一个访问失败后的默认值
,即使没有写相关参数,也会返回none
,而不是报错。
字典名.get('键','无该键时返回的值')
如下面例子,使用方括号[]
来访问'wo'
时会报错,因为字典里并没有'wo'
这个键,但是另外几行代码使用get()
方法就可以保证程序能够完成运行,如果在字典中找到键'wo'
,get()
方法会返回其值
,如果没有,则返回第二个参数'字典中没有要查询的家人。'
。
shuiguo={'laopo':'xi gua','erzi':'mi hou tao','mama':'ju zi'}
# print(shuiguo['wo']) 这行语句无法执行,Python会报错:KeyError: 'wo'
# 而下面的可以执行,并反馈查无此人给用户。
print(shuiguo.get('wo','字典中没有要查询的家人。\n'))
get()返回的值none并不属于错误,而是一个表示所需值不存在的特殊值,后面会学到它的实际用途。
本节习题
习题 6.1 用字典存储并输出一个人的姓名年龄籍贯等
xinxi = {
'firstname':'jin cheng',
'lastname':'wang',
'age':'16',
'jiguan':'shanxi taiyuan'
}
print(f"姓名:{xinxi['lastname'].title()} {xinxi['firstname'].title()}\t年龄:{xinxi['age']}\t籍贯:{xinxi['jiguan'].title()}\n")
习题 6.2 用字典存储一组人及他们的幸运数字
shuzi={
'laopo':9,
'erzi':6,
'mama':19,
'wo':8,
}
print(f"lapo的幸运数字是:{shuzi['laopo']}")
print(f"erzi的幸运数字是:{shuzi['erzi']}")
print(f"mama的幸运数字是:{shuzi['mama']}")
print(f"wo的幸运数字是:{shuzi['wo']}\n")
习题 6.3 一个像真字典一样的Python字典
zidian={
'输出':'用print()函数输出到屏幕。学习阶段非常重要的函数,可以检验练习代码编写是否正确。',
'弹出':'使用pop()将列表中不再需要的元素弹出到新变量,以发挥其他作用,del则会彻底删除该元素。',
'列表':'含有一系列元素的存储单元,其内容之间可以没有关联,可以是任何东西。',
'字典':'字典中存储的是一对对的键值对,通过访问键可以获取其关联的值,处理实物非常有用。',
'循环':'使用循环可以高效的遍历整个列表或者列表中指定的切片部分,使用简单的代码就能处理大量数据。',
}
print(f"名词解释:\n")
print(f"输出:\n\t{zidian['输出']}")
print(f"弹出:\n\t{zidian['弹出']}")
print(f"列表:\n\t{zidian['列表']}")
print(f"字典:\n\t{zidian['字典']}")
print(f"循环:\n\t{zidian['循环']}")
6.3 遍历字典
Python字典的用途很广,遍历字典也灵活,可以遍历所有键值对,或只遍历其中的键或值。
6.3.1 遍历键值对 items()方法
遍历字典的for循环其带有2个变量,分别对应字典中的键
和值
,同样使用逗号,
分隔。
for 变量1 , 变量2 in 字典名.items() :
# item()方法告诉Python要遍历的是键值对。
下面是一个网站用户的基本信息字典。之前的方括号[]
语法或者get()
方法,只能访问其中的一组键值对或一个值,要访问字典的所有键值对,可以使用for循环来遍历。
user01 = {'username':'pollen','first':'pollen','last':'wang'}
如下代码,可以遍历上面这个用户字典的所有键值对,并每行一组打印出来:
for key , value in user01.items() :
print(f"字典中的键:{key} \t 该键关联的值:{value}\n")
之前的一个例子中,字典存储了几位家人及其最爱的水果,这类列表通过遍历键值对输出所有人的匹配信息。如下:
shuiguo={
'laopo':'xi gua',
'erzi':'mi hou tao',
'mama':'ju zi',
}
for name , zuiai in shuiguo.items() :
print(f"{name.title()}最爱的水果是:{zuiai.title()}")
通过上面两个例子可以看出,这种遍历键值对的方法中,逗号,
前的变量对应的是所有键
,而逗号,
后的变量则对应其关联的值
。无论字典有多少键值对,都可以如此遍历。
6.3.2 遍历字典中的键 keys()方法
在仅需要访问字典中的键,而不关心值时,用keys()方法遍历。如这个水果的例子,我只想知道字典中记录了哪些家人:
shuiguo={
'laopo':'xi gua',
'erzi':'mi hou tao',
'mama':'ju zi',
}
for name in shuiguo.keys() :
print(f"已记录{name.title()}最爱的水果。\n")
在Python中keys()方法是可以省略不写keys()的,如只写为:
for name in shuiguo :
和上面的语句是等价的。因为其默认遍历所有的键,但我觉得些出来会让程序更易读。
而当需要为指定的人输出特殊信息时,可以结合for循环和if语句对字典进行处理。例如我要特别处理有关laopo的信息。
shuiguo={
'laopo':'xi gua',
'erzi':'mi hou tao',
'mama':'ju zi',
}
#为需要特别关注的人新建列表
tebie=['laopo']
for name in shuiguo.keys():
#遍历字典所有键并输出
print(f"已经记录{name.title()}最爱的水果。")
#如果name变量的值存在于列表tebie中
if name in tebie:
#则将name变量的值作为键去访问列表shuiguo,并获取其关联的值赋给sg。
sg=shuiguo[name].title()
#为特别关注的人输出其最爱的水果。
print(f"\t{name}最爱的是:{sg}")
还可以使用上面学过的not in
语句来检查字典中是否包含某个键。如,可以检查我最爱的水果是否被记录在了字典里:
shuiguo={
'laopo':'xi gua',
'erzi':'mi hou tao',
'mama':'ju zi',
}
if 'wo' not in shuiguo.keys():
print(f"\n尚未记录wo最爱的水果。\n")
实际上
keys()
方法返回的是一个列表,其中包含字典中所有的键,因此可以用if语句检查'wo'
是否在其中。
6.3.3 按指定顺序字典中的键
既然keys()方法返回的是一个列表,那实际上可以用前面学过对列表进行排序的函数,对到的所有键进行排序。例如sorted()
函数。
shuiguo={
'laopo':'xi gua',
'erzi':'mi hou tao',
'mama':'ju zi',
}
for name in sorted(shuiguo.keys()):
print(f"已经记录{name.title()}最爱的水果。\n")
同样是遍历整个字典,但在输出前,sorted()
函数所有键进行了排序,所以输出的顺序并不是键值对加入字典时的顺序,而是sorted()指定的字母顺序。
6.3.4 遍历字典中的值 values()方法
跟keys()方法类似;values()
方法也返回一个列表,字典中所有值的列表。
shuiguo={
'laopo':'xi gua',
'erzi':'mi hou tao',
'mama':'ju zi',
'wo':'xi gua'
}
print(f"家人爱吃的水果有:")
for sg in shuiguo.values():
print(f"\t{sg.title()}")
用集合set()去除重复值
values()方法会获取字典中的所有值,并不考虑是否有重复值。
set( 字典名.values() )
上例中laopo和wo都爱吃xi gua,所以会重复输出。在实际应用中,可能出现很多的重复值。很多时候需要筛选,不要重复值。
print(f"家人爱吃的水果有:")
#将字典shuiguo中的所有值传入set(),由其来筛选不重复的值并赋给变量sg。
for sg in set(shuiguo.values()):
print(f"\t{sg.title()}")
创建集合
可以通过花括号{}
包围来创建集合,每个元素之间用逗号,
分隔。这和字典很像,但不要混淆,字典中以逗号,
分隔的是键值对,键值对中的键和值之间用冒号:
关联;而集合中则只有独立元素,并不成对。如:
集合名 = { '元素1','元素2','元素n' }
集合并不以任何特定顺序存储元素,它只确保每个元素都是唯一。
本节习题
习题 6.4 遍历并输出字典
zidian={
'输出':'用print()函数输出到屏幕。学习阶段非常重要的函数,可以检验练习代码编写是否正确。',
'弹出':'使用pop()将列表中不再需要的元素弹出到新变量,以发挥其他作用,del则会彻底删除该元素。',
'列表':'含有一系列元素的存储单元,其内容之间可以没有关联,可以是任何东西。',
'字典':'字典中存储的是一对对的键值对,通过访问键可以获取其关联的值,处理实物非常有用。',
'循环':'使用循环可以高效的遍历整个列表或者列表中指定的切片部分,使用简单的代码就能处理大量数据。',
'键值对':'字典中存储的互相关联的一对值,访问键可以获取值。',
'集合':'用花括号包围起来的一组元素,形似列表,但不允许存在重复值。',
}
print(f"Python名词解释:\n")
for mc,sy in zidian.items():
print(f"【{mc}】:{sy}")
习题 6.5 关于河流的字典
heliu={
'尼罗河':'埃及',
'亚马逊河':'巴西',
'长江':'中国',
}
for hl,gj in heliu.items():
print(f"\n世界三大河流之一的{hl},流经{gj}。")
print(f"\n世界三大河流:")
for hl in heliu.keys():
print(f"\t{hl}")
print(f"\n世界三大河流所流经的国家:")
for gj in heliu.values():
print(f"\t{gj}")
习题 6.6 关于最爱的水果的调查
yizhi={
'lao po':'xi gua',
'er zi':'ni hou tao',
}
duixiang=['lao po','er zi','ma ma','wo']
print(f"需要了解的家人有:")
for daicha in duixiang:
print(f"\t{daicha.title()}")
for jg in duixiang:
if jg in yizhi.keys():
print(f"已完成{jg.title()}最爱水果的了解。")
else:
print(f"尚未了解{jg}最爱的水果……")
6.4 嵌套
可以在列表中嵌套字典,或在字典中嵌套列表,甚至在字典中嵌套字典。嵌套是一个很强大的功能。
6.4.1 字典列表(在列表中存储字典)
#列表 中嵌套 字典
列表名 = [ {字典1} , {字典2} , {字典n} ]
#更易读的书写方式
列表名 = [
{
'字典1键1':'字典1值1',
'字典1键2':'字典1值2',
},
{
'字典2键1':'字典2值1',
'字典2键2':'字典2值2',
}
]
如果一个字典可以存储一个人的信息,那么多个人的信息,可以存储在各自的字典中,再组成一个人员字典的列表来统一管理。如:
jiaren01={'name':'laopo','zuiai':'xi gua'}
jiaren02={'name':'erzi','zuiai':'mi hou tao'}
jiaren03={'mama':'mama','zuiai':'ju zi'}
jiaren=[jiaren01,jiaren02,jiaren03]
for xinxi in jiaren :
print(xinxi)
另一种情况是自动生成多个结构相同、内容相同字典,并加入到列表中去,例如今天有一批新虾入缸:
#创建存储新入缸水晶虾记录的空白列表
xinrugang=[]
#用range()循环创建30条记录
for bianhao in range(0,30):
#其中每条记录都是一个字典,包括颜色体长等
xinxia={'编号':bianhao,'颜色':'红白','体长':10,'涨势':'中'}
#将每一个字典都作为一个值追加到列表末尾。
xinrugang.append(xinxia)
#用切片输出列表中的前5个值,即前5只虾的字典
for xia in xinrugang[0:5]:
print(xia)
print("...")
#用len()核实共创建了多少只新虾记录
print(f"创建了{len(xinrugang)}只新虾记录。")
经过一段时间养殖后可以根据生长情况调整其中部分虾的字典数据,比如有5只体质很好,涨势很快。
#将前3只虾的体长修改为:15,涨势修改为:快。
for xia in xinrugang[0:5]:#切片用冒号:不是逗号,切记!切记!!!
#用if确保只修改原来体长为10的记录,而不是前5个
if xia['体长'] == 10:#注意for和if后面的冒号:不要总写成中文字符!!!
xia['体长']=15
xia['涨势']='快'
#切片输出前8个,可以看到其中5个被修改。
for xia in xinrugang[0:8]:
print(xia)
这个循环可以进一步扩展,如果列表中原本就有些成年虾,可以分别修改其涨势,如:
xinrugang=[]
#如有10只涨势普通的虾
for bianhao in range(0,10):
xinxia={'编号':bianhao,'颜色':'红白','体长':10,'涨势':'中'}
xinrugang.append(xinxia)
#还有有10只涨势较快的高品质虾
for bianhao in range(0,10):
xinxia={'编号':bianhao + 10,'颜色':'红白','体长':15,'涨势':'快'}
xinrugang.append(xinxia)
print(xinrugang)
#下面循环修改新发现的高品质虾改为涨势快,而已有的部分成虾修改为涨势减缓
for xia in xinrugang[0:15]:
if xia['体长'] == 10:
xia['体长']=15
xia['涨势']='中'
elif xia['体长'] == 15:
xia['体长']=25
xia['涨势']='慢'
#输出查看修改结果
for xia in xinrugang[:]:
print(f"\n{xia}")
将大量同类对象的信息,创建字典并嵌套在列表中,可以遍历或以同样方式处理数据,因为他们结构相同。
6.4.2 在字典中存储列表
#字典 中嵌套 列表
字典名={'键1':'列表1','键2':'列表2','键n':'列表n',}
#更易读的书写方式
字典名 = {
'键1':[ 列表1值1 , 列表1值2 ] ,
'键2':[ 列表2值1 , 列表2值2 ] ,
}
有时候字典中的一个键所关联的不是一个值,而应该是一系列值,这种情况可以将这些值组成一个列表,作为字典的值。如:
#下面字典存储了Lao Po最爱的三种水果,这三种水果组成一个列表并与键sg向关联。
zuiai={
'name':'lao po',
'sg':['xi gua','mi hou tao','ti zi'],
}
#接下来通过访问字典输出爱人的名字及其最爱的水果。
#通过键name输出爱人的名字
print(f"\n{zuiai['name'].title()}最爱的水果是:")
#通过对键sg使用for循环输出其最爱的水果
for shuiguo in zuiai['sg']:
print(f"\t{shuiguo.title()}")
有时候,字典中的键不是一个字段名而是有意义的具体的数据,其关联的值则是一系列相关值组成的列表,要访问这样的字典,需要使用for循环的嵌套,即在一个for循环中使用另一个for循环。
#这个字典包含了3位爱人及其最爱的水果,且用爱人的名字直接作为字典的键
zuiai={
'lao po':['xi gua','mi hou tao','ti zi'],
'er zi':['mi hou tao','cheng zi'],
'ma ma':['ju zi'],
}
#用一个for循环遍历字典,获取所有爱人的名字
#变量airen和sg,分别对应键值对中的名称和水果列表
for airen,sg in zuiai.items():
print(f"\n{airen.title()}最爱的水果有:")
for shuiguo in sg:
print(f"\t{shuiguo.title()}")
第一层循环中,水果列表被当做一个值付给sg,
在下一层循环中,再将sg这个列表中的每一个值分别赋给shuiguo用以输出。
上面例子可以进一步扩展,添加if语句来判断水果的数量,以便输出不同的描述。
for airen,sg in zuiai.items():
#用len()函数判断列表sg中的值的数量,输出不同描述
if len(sg) > 1:
print(f"\n{airen.title()}最爱的水果有:")
else:
print(f"\n{airen.title()}只爱一种水果:")
for shuiguo in sg:
print(f"\t{shuiguo.title()}")
列表和字典的嵌套层级不应过多,如果需要多层嵌套,可能有更简单的解决方法。
6.4.3 在字典中存储字典
#字典 中嵌套 字典
上层字典 = { '键1':{下层字典1} , '键2':{下层字典2} , }
#更易读的写法
上层字典 = {
'上层字典键1':{
'下层字典键1':'关联值',
'下层字典键2':'关联值',
},
'上层字典键2':{
'下层字典键1':'关联值',
'下层字典键2':'关联值',
},
}
像网站用户这样的数据,可以用一个字典嵌套另一个字典来进行存储。因为用户名是不允许重复的,所以将用户名作为键,而将该用户关联的其他参数,如:姓名、性别、国籍等信息编入一个字典,再将该字典作为用户名键所关联的值。
字典和字典的嵌套,会让代码看上去奇怪且复杂。尤其是当字典结构不同的时候for循环语句会更加复杂,所以,尽量不要那么干。
#下面这个字典中,首层字典的键就是用户名,而其关联的值,则是下一层字典,其中存储了该用户的姓名、性别、国籍。
users={
#用户名作为首层键,其值是下一层字典
'laopo':{
#下一层字典包含了姓名、性别、国籍等信息
'xingming':'lao po',
'xingbie':'nv',
'guoji':'zhong guo',
},#首次编写时已经糊涂了,这里少了逗号,
#多练习,多习惯,二层字典的结尾就是首层字典的值的结束,必须有逗号,分隔
'erzi':{
'xingming':'er zi',
'xingbie':'nan',
'guoji':'zhong guo',
},
'mama':{
'xingming':'ma ma',
'xingbie':'nv',
'guoji':'zhong guo',
},
}
for name,info in users.items():
#访问第一层字典后,从name获取用户名
print(f"\n用户名:{name.title()}")
#访问第一层字典后,info中存储的是下一层字典,通过访问其中的肩就能获取相关值。
#或者直接用items()方法获取其中的键和值。
print(f"\t姓名:{info['xingming'].title()}"
#为了易读分行书写的print()函数中的f字符串必须每行以f开头。
f"\t性别:{info['xingbie'].title()}"
f"\t国籍:{info['guoji'].title()}"
)
print()函数可以像上面这样分行书写,以使代码更容易阅读。这里要注意的是,多行书写的print()函数内容,自第二行起每行都要
缩进
,且每行都要以引号""
包围起来;如果是多行书写f字符串,那么除了上述要求外,每行的开头都要有f
,否则会将双引号内的所有内容都当做字符串直接输出,而不进行处理。其他对于字符串的规则在这里同样适用。
6.5 小结
本章学习了字典的创建及遍历,以及如何单独访问其中的键或值,还学习了字典和列表之间的嵌套,相比前面的确更加实用和强大,当然,也更加复杂,努力!!!
下一章学习while循环,莫急莫急,先做好本章习题,循序渐进才能学得扎实。
本章最后几个习题
习题 6.7 列表 中的 字典
存储多人信息字典的列表
jiaren=[]
laopo={'姓名':'老婆','性别':'女','国籍':'中国',}
jiaren.append(laopo)
erzi={'姓名':'儿子','性别':'男','国籍':'中国',}
jiaren.append(erzi)
mama={'姓名':'妈妈','性别':'女','国籍':'中国',}
jiaren.append(mama)
print(jiaren)
for xinxi in jiaren:
print(xinxi)
习题 6.8 列表 中的 字典 2
存储多个宠物的字典信息到一个列表中,并遍历访问。
shuijingxia=[
{'颜色':'红白','长势':'慢','体长':20,},
{'颜色':'酒红','长势':'慢','体长':23,},
{'颜色':'黑金刚','长势':'中','体长':16,},
]
print("\n水晶虾数据资料:")
for xia in shuijingxia:
print(f"颜色:{xia['颜色']}\t长势:{xia['长势']}\t体长:{xia['体长']}mm")
习题 6.9 字典 中的 列表
收集几个人最想去的1~3个地方
xiangwang={
'lao po':['chong qing','shen zhen','xiang gang'],
'ma ma':['bei jing','hang zhou'],
'wo':['hai nan']
}
print(xiangwang)
for jiaren,difang in xiangwang.items():
if len(difang) > 1 :
print(f"{jiaren.title()}最向往的地方有:")
else:
print(f"{jiaren.title()}只想去一个地方:")
for didian in difang:
print(f"\t{didian.title()}")
习题 6.11 字典中的字典
在一个字典中存储3个城市,并将每个城市所属的国家,及其面积和人口存入嵌套字典
chengshi={
'bei jing':{
'guojia':'zhong guo',
'mianji':16410,
'renkou':2184.3,
},
'xi ni':{
'guojia':'ao da li ya',
'mianji':12368.19,
'renkou':503,
},
'hui ling dun':{
'guojia':'xin xi lan',
'mianji':266.25,
'renkou':45,
},
}
#带描述输出所有信息
for cityname,infos in chengshi.items():
print(f"\n城市:{cityname.title()}")
print(f"所属国家:{infos['guojia'].title()}"
f"\t面积:约{infos['mianji']}km²"
f"\t人口:约{infos['renkou']}万")
#不带描述,仅输出所有值
for cityname,infos in chengshi.items():
print(f"\n城市:{cityname.title()}")
for xiangmu in infos.values():
print(f"\t信息:{xiangmu}")