【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)
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值