分析
根据题目提示,要求使用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)