Python学习笔记 第6章,字典(字典的列表、列表的字典、字典的字典)
Python学习笔记 第6章,字典(字典的列表、列表的字典、字典的字典)

Python学习笔记 第6章,字典(字典的列表、列表的字典、字典的字典)

第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}")

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注