MSK 发表于 2017-8-4 22:11:30

Python:每日一题 70 (答题领鱼币)

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

多日不见

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




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

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


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




题目要求:

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




来个不太好的栗子:

{'Fishc':{'info':{'boss':'小甲鱼','url':'http://www.fishc.com'}}}






答案:

等待大佬填上这个空白~

新手·ing 发表于 2017-8-4 22:16:17

!!!

ooxx7788 发表于 2017-8-4 22:23:53

坐等递归出场了!

新手·ing 发表于 2017-8-5 09:00:28

@李金龙 @冬雪雪冬 @hldh214 @lumber2388779

jerryxjr1220 发表于 2017-8-5 10:00:12

本帖最后由 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'>

李金龙 发表于 2017-8-5 10:10:39

jerryxjr1220 发表于 2017-8-5 10:00
递归写法,早上没睡醒,乱写写




{:10_277:} 膜拜大佬

wyp02033 发表于 2017-8-9 10:46:16

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)

solomonxian 发表于 2017-8-16 20:40:14

如果外层字典都只有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)

shigure_takimi 发表于 2017-12-6 11:38:50

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)


有错误。

append 发表于 2018-1-8 19:40:12

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)))

wyp02033 发表于 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,不知道这样解释能不能明白。

Geoffreylee 发表于 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'}}})

aironeng 发表于 2020-12-14 09:22:47

小白前来学习

aironeng 发表于 2020-12-14 09:23:56

小白前来学习
页: [1]
查看完整版本: Python:每日一题 70 (答题领鱼币)