鱼C论坛

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

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

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

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

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

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

多日不见

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






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

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




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





题目要求:

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





来个不太好的栗子:
{'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 编辑

递归写法,早上没睡醒,乱写写
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[key])) == "<class 'dict'>":
                                structure += scan_dic(dic[key], structure)
                                structure += 'end ' + key + '\n\n--\n| key:' + key + " value_type: <class 'dict'>\n"
                        else:
                                structure += '|key:' + key + ' value_type:' + str(type(dic[key])) + '\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'>

[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 | 显示全部楼层
def printdict(dic):
    
    for key in dic.keys():
        
        if not isinstance(dic[key],dict):
            print('--')
            print("| key:%s   value_type:%s" % (key,type(dic[key])))

        else:
            
            printdict(dic[key])
            print()
            print("end   %s" %key)
            print()
            print('--')
            print("| key:%s   value_type:%s" % (key,type(dic[key])))
            
            
if __name__ == '__main__':
    d = {'Fishc':{'info':{'boss':'小甲鱼','url':'http://www.fishc.com'}}}
    printdict(d)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-16 20:40:14 | 显示全部楼层
如果外层字典都只有1个键,根据仅有的一个例子,只好这样假设了
只打印不返回,那可以每层递归打印一个字典
def scan_dict(d,s=''):
    for key in d:
        s = "| key: %s value_type: %s \n"%(key,type(d[key]))+s
        if isinstance(d[key],dict):
            scan_dict(d[key])
            s = "end %s \n\n--\n"%key + s
    print(s)
需要返回的话,就用闭包
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[key]))+s
            if isinstance(d[key],dict):
                s = "\nend %s \n\n--\n"%key + s
                scanning(d[key])     
        if l==1: return s
    return scanning(d,1)

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-12-6 11:38:50 | 显示全部楼层
def scanDict(dictionary):
    s = []
    for key in dictionary:
        val = dictionary[key]
        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)

有错误。
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层
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'}}})
想知道小甲鱼最近在做啥?请访问 -> 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-6-14 04:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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