Python:每日一题 70 (答题领鱼币)
本帖最后由 新手·ing 于 2017-8-17 12:27 编辑多日不见
在下又拿来一道题目供大佬们消遣
在 Python 之禅 里有这么一句话:
Beautiful is better than ugly.
优美胜于丑陋
今天对大家的要求就是在完成题目的同时,尽量做到 美观!
题目要求:
扫描一个字典,将它的结构 打印 出来~
来个不太好的栗子:
{'Fishc':{'info':{'boss':'小甲鱼','url':'http://www.fishc.com'}}}
答案:
等待大佬填上这个空白~ !!! 坐等递归出场了! @李金龙 @冬雪雪冬 @hldh214 @lumber2388779 本帖最后由 jerryxjr1220 于 2017-8-5 10:01 编辑
递归写法,早上没睡醒,乱写写{:10_264:}
dic = {'Fishc':{'info':{'boss':'小甲鱼','url':'http://www.fishc.com'}, 'member':1000}}
def scan_dic(dic, structure=''):
if str(type(dic)) == "<class 'dict'>":
for key in dic:
if str(type(dic)) == "<class 'dict'>":
structure += scan_dic(dic, structure)
structure += 'end ' + key + '\n\n--\n| key:' + key + " value_type: <class 'dict'>\n"
else:
structure += '|key:' + key + ' value_type:' + str(type(dic)) + '\n'
return structure
print(scan_dic(dic))
|key:boss value_type:<class 'str'>
|key:url value_type:<class 'str'>
end info
--
| key:info value_type: <class 'dict'>
|key:member value_type:<class 'int'>
end Fishc
--
| key:Fishc value_type: <class 'dict'>
jerryxjr1220 发表于 2017-8-5 10:00
递归写法,早上没睡醒,乱写写
{:10_277:} 膜拜大佬 def printdict(dic):
for key in dic.keys():
if not isinstance(dic,dict):
print('--')
print("| key:%s value_type:%s" % (key,type(dic)))
else:
printdict(dic)
print()
print("end %s" %key)
print()
print('--')
print("| key:%s value_type:%s" % (key,type(dic)))
if __name__ == '__main__':
d = {'Fishc':{'info':{'boss':'小甲鱼','url':'http://www.fishc.com'}}}
printdict(d)
如果外层字典都只有1个键,根据仅有的一个例子,只好这样假设了{:10_257:}
只打印不返回,那可以每层递归打印一个字典
def scan_dict(d,s=''):
for key in d:
s = "| key: %s value_type: %s \n"%(key,type(d))+s
if isinstance(d,dict):
scan_dict(d)
s = "end %s \n\n--\n"%key + s
print(s)
需要返回的话,就用闭包{:10_258:}
def scan_dict_2(d):
"""scan_dict(dict)->str, scan a dict and return its structure"""
s = ""
def scanning(d,l=0):
nonlocal s
for key in d:
s = "| key: %s value_type: %s \n"%(key,type(d))+s
if isinstance(d,dict):
s = "\nend %s \n\n--\n"%key + s
scanning(d)
if l==1: return s
return scanning(d,1) def scanDict(dictionary):
s = []
for key in dictionary:
val = dictionary
s.append('| key:{} value_type:{}'.format(key, type(val)))
if isinstance(val, dict):
s.append('- -')
s.append('\n')
s.append('end {}'.format(key))
s.append('\n')
scanDict(val)
s = s[::-1]
for i in s:
print(i)
def printScan(dictionary):
print('- -')
scanDict(dictionary)
a = {'Fishc':{'info':{'boss':'小甲鱼','url':'http://www.fishc.com'}}}
printScan(a)
有错误。 wyp02033 发表于 2017-8-9 10:46
请教,key = 'url'循环结束之后,为什么还会返回去等于‘info’,dic.keys()不是等于'boss'和‘url’吗?
if not isinstance(dic,dict):
print('--')
print("| key:%s value_type:%s" % (key,type(dic))) append 发表于 2018-1-8 19:40
请教,key = 'url'循环结束之后,为什么还会返回去等于‘info’,dic.keys()不是等于'boss'和‘url’吗? ...
对于最里层的字典,boss和url是key,对于第二层字典,info是key,{'boss': '小甲鱼', 'url': 'http://www.fishc.com'}是value,对于最外层字典,fishc是key,{'info': {'boss': '小甲鱼', 'url': 'http://www.fishc.com'}}是value,所以key=url结束后,返回后key是info,不知道这样解释能不能明白。 def dict_structure(dic: dict):
for key, value in dic.items():
if isinstance(value, dict):
dict_structure(value)
print('\nend', key, '\n\n- -')
print('| key:', key, 'value_type:', type(value))
else:
print('| key:', key, 'value_type:', type(value))
dict_structure({'Fishc':{'info':{'boss':'小甲鱼','url':'http://www.fishc.com'}}}) 小白前来学习 小白前来学习
页:
[1]