【PTA-python】第5章-2 图的字典表示 (20 分)--处理嵌套字典及学习表示图及计算简单的图的属性

第5章-2 图的字典表示

分析

根据题目提示,要求使用eval函数处理输入。
能够取到输入的字典内的字典键的个数,值的求和。
Python eval() 函数

  • eval这个函数就是在返回,它觉得正确的那个值

Python 字典(Dictionary)
Python3 字典 values() 方法

  • 返回一个迭代器,可以使用 list() 来转换为列表,列表为字典中的所有值。list(dict.values()))
    我们使用list(dict.values())取到了列表元素a=eval(input()) b=list(a.values()) print(type(b))得到b的类型是list,长度为1.但eval不能对b处理。
    在这里插入图片描述
    可实际上,处理没那么麻烦。得到字典后,for循环即可得到每个键,取这个下标下的值,对这个值(实际上也是一个键),再for循环,取键里的键和对应的值。
a=eval(input())#a是得到的字典
for j in a:#for in 取到字典的键
    tmp=a[j]#取字典的值
    for key in tmp:#取嵌套字典的键
        edge.append(key)#edge存边
        length.append(int(tmp[key]))#length存边长

经过对比发现,如果直接a=input()type(a)实际上是str
在这里插入图片描述

在这里插入图片描述但如果是a=eval(input())那么得到的a就是dict
在这里插入图片描述

在这里插入图片描述

题目

在这里插入图片描述

图的字典表示。输入多行字符串,每行表示一个顶点和该顶点相连的边及长度,输出顶点数,边数,边的总长度。比如上图0点表示:
{‘O’:{‘A’:2,‘B’:5,‘C’:4}}。用eval函数处理输入,eval函数具体用法见第六章内置函数。
输入格式:

第一行表示输入的行数 下面每行输入表示一个顶点和该顶点相连的边及长度的字符串
输出格式:

在一行中输出顶点数,边数,边的总长度

输入样例:

在这里给出一组输入。例如:

4
{'a':{'b':10,'c':6}}
{'b':{'c':2,'d':7}}
{'c':{'d':10}}
{'d':{}} 

输出样例:

在这里给出相应的输出。例如:

4 5 35

解法

自解

n=int(input())
edge=[]
length=[]
for i in range(n):
	a=eval(input())#a是得到的字典
	for j in a:#for in 取到字典的键
	    tmp=a[j]#取字典的值
	    for key in tmp:#取嵌套字典的键
	        edge.append(key)#edge存边
	        length.append(int(tmp[key]))#length存边长
print("{} {} {}".format(n,len(edge),sum(length)))

他解

Notrace_zero
码农 [码农] Notrace_zero:

s = 0;s1 = 0;n = int(input())
for i in range(n):
    lis = [val for key,val in [val for key,val in eval(input()).items()][0].items()]#items()方法分成键值对,取val(实际上还是个key-val关系),再取val。得到边,实际上边数也是长度数。
    s += len(lis);s1 += sum(lis)
print(n,s,s1)
posted @ 2021-04-20 19:44  flybird2008  阅读(18)  评论(0)    收藏  举报  来源