鱼C论坛

 找回密码
 立即注册
查看: 3819|回复: 13

[技术交流] Python:每日一题 70 (答题领鱼币)

[复制链接]
发表于 2017-8-4 22:11:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 新手·ing 于 2017-8-17 12:27 编辑

多日不见

在下又拿来一道题目供大佬们消遣






在 Python 之禅 里有这么一句话:

Beautiful is better than ugly.      
优美胜于丑陋




今天对大家的要求就是在完成题目的同时,尽量做到 美观!





题目要求:

扫描一个字典,将它的结构 打印 出来~





来个不太好的栗子:

  1. {'Fishc':{'info':{'boss':'小甲鱼','url':'http://www.fishc.com'}}}
复制代码


xx.PNG






答案:

等待大佬填上这个空白~

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-4 22:16:17 | 显示全部楼层
!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-4 22:23:53 | 显示全部楼层
坐等递归出场了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-5 09:00:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-5 10:00:12 | 显示全部楼层
本帖最后由 jerryxjr1220 于 2017-8-5 10:01 编辑

递归写法,早上没睡醒,乱写写
  1. dic = {'Fishc':{'info':{'boss':'小甲鱼','url':'http://www.fishc.com'}, 'member':1000}}

  2. def scan_dic(dic, structure=''):
  3.         if str(type(dic)) == "<class 'dict'>":
  4.                 for key in dic:
  5.                         if str(type(dic[key])) == "<class 'dict'>":
  6.                                 structure += scan_dic(dic[key], structure)
  7.                                 structure += 'end ' + key + '\n\n--\n| key:' + key + " value_type: <class 'dict'>\n"
  8.                         else:
  9.                                 structure += '|key:' + key + ' value_type:' + str(type(dic[key])) + '\n'               
  10.         return structure

  11. 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'>

[Finished in 0.1s]

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
新手·ing + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-5 10:10:39 | 显示全部楼层
jerryxjr1220 发表于 2017-8-5 10:00
递归写法,早上没睡醒,乱写写

膜拜大佬  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-9 10:46:16 | 显示全部楼层
  1. def printdict(dic):
  2.    
  3.     for key in dic.keys():
  4.         
  5.         if not isinstance(dic[key],dict):
  6.             print('--')
  7.             print("| key:%s   value_type:%s" % (key,type(dic[key])))

  8.         else:
  9.             
  10.             printdict(dic[key])
  11.             print()
  12.             print("end   %s" %key)
  13.             print()
  14.             print('--')
  15.             print("| key:%s   value_type:%s" % (key,type(dic[key])))
  16.             
  17.             
  18. if __name__ == '__main__':
  19.     d = {'Fishc':{'info':{'boss':'小甲鱼','url':'http://www.fishc.com'}}}
  20.     printdict(d)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-16 20:40:14 | 显示全部楼层
如果外层字典都只有1个键,根据仅有的一个例子,只好这样假设了
只打印不返回,那可以每层递归打印一个字典
  1. def scan_dict(d,s=''):
  2.     for key in d:
  3.         s = "| key: %s value_type: %s \n"%(key,type(d[key]))+s
  4.         if isinstance(d[key],dict):
  5.             scan_dict(d[key])
  6.             s = "end %s \n\n--\n"%key + s
  7.     print(s)
复制代码

需要返回的话,就用闭包
  1. def scan_dict_2(d):
  2.     """scan_dict(dict)->str, scan a dict and return its structure"""
  3.     s = ""
  4.     def scanning(d,l=0):
  5.         nonlocal s
  6.         for key in d:
  7.             s = "| key: %s value_type: %s \n"%(key,type(d[key]))+s
  8.             if isinstance(d[key],dict):
  9.                 s = "\nend %s \n\n--\n"%key + s
  10.                 scanning(d[key])     
  11.         if l==1: return s
  12.     return scanning(d,1)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
MSK + 5 + 5 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-12-6 11:38:50 | 显示全部楼层
  1. def scanDict(dictionary):
  2.     s = []
  3.     for key in dictionary:
  4.         val = dictionary[key]
  5.         s.append('| key:{}    value_type:{}'.format(key, type(val)))        
  6.         if isinstance(val, dict):
  7.             s.append('- -')
  8.             s.append('\n')
  9.             s.append('end {}'.format(key))
  10.             s.append('\n')
  11.             scanDict(val)
  12.     s = s[::-1]
  13.     for i in s:
  14.         print(i)

  15. def printScan(dictionary):
  16.     print('- -')
  17.     scanDict(dictionary)

  18. a = {'Fishc':{'info':{'boss':'小甲鱼','url':'http://www.fishc.com'}}}
  19. printScan(a)
复制代码


有错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-8 19:40:12 | 显示全部楼层

请教,key = 'url'循环结束之后,为什么还会返回去等于‘info’,dic.keys()不是等于'boss'和‘url’吗?
        if not isinstance(dic[key],dict):
            print('--')
            print("| key:%s   value_type:%s" % (key,type(dic[key])))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-11 22:13:36 | 显示全部楼层
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,不知道这样解释能不能明白。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 18:12:15 | 显示全部楼层
  1. def dict_structure(dic: dict):
  2.     for key, value in dic.items():
  3.         if isinstance(value, dict):
  4.             dict_structure(value)
  5.             print('\nend', key, '\n\n- -')
  6.             print('| key:', key, 'value_type:', type(value))

  7.         else:
  8.             print('| key:', key, 'value_type:', type(value))


  9. dict_structure({'Fishc':{'info':{'boss':'小甲鱼','url':'http://www.fishc.com'}}})
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-14 09:22:47 | 显示全部楼层
小白前来学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-14 09:23:56 | 显示全部楼层
小白前来学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 23:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表