关于压栈的一个案例

时间:2022-12-01 17:04:06
msg = '''
有⼀个数据结构如下所⽰,请编写⼀个函数从该结构数据中返回由指定的字段和对应的值组成的字
典。如果指定字段不存在,则跳过该字段。(10分)
data:{"time":"2016-08-05T13:13:05",
"some_id":"ID1234",
"grp1":{ "fld1":1,
"fld2":2},
"xxx2":{ "fld3":0,
"fld5":0.4},
"fld6":11,
"fld7":7,
"fld46":8}
fields:由"|"连接的以"fld"开头的字符串,如:fld2|fld3|fld7|fld19
def select(data,fields):
# TODO:implementation
return result

def select(data,fields):
fields_lst = fields.split(‘|’)
for key in data:
if type(data[key]) == dict:
pass
return result
'''

print(msg)

mydict ={"data":{"time":"2016-08-05T13:13:05",
"some_id":"ID1234",
"grp1":{ "fld1":1,
"fld2":2},
"xxx2":{ "fld3":0,
"fld5":0.4},
"fld6":11,
"fld7":7,
"fld46":8}}


fields = 'fld2|fld3|fld7|fld19'

def wenwa(datadict,fields):

fieldslist = fields.split('|')

answerdict = {}

l = [mydict]

while l:

data = l.pop()

for wenwa in data:

if type(data[wenwa])==dict: #如果对应字典值的数据类型还是字典:则扔回列表中接着拆

l.append(data[wenwa])

else:

if wenwa in fieldslist:

answerdict[wenwa]=data[wenwa]



print("这里是%s"%answerdict)


wenwa(mydict,fields)


#和晓强分享这道题的目的是:

# 首先,while循环的条件居然破天荒的是一个列表!鬼知道,列表怎么还能当作循环条件

#其二,代码使用了压栈的思想,这对神圣丁来说是第一次!

#其三,for循环中,第55行-63行灵活的用单一变量,再现了字典中的两种数据类型,键和值,这是最引人注目的!

#要是换做神圣丁,一定会十分笨拙的写为 for key in data.keys() ,for value in data.values()

#最值得大书特书的是l = list(mydict)的使用,整个字典被当作列表,不断被弹出pop().对于弹出的部分,进行类型判别,各归其主

#单一的值,根据对应的键加入resultlist(当然这些值的前提是,fieldslist里请求的),对于那些嵌套的数据类型,则会被重新丢进列表l[]进行判断

#整个过程就像是脱粒机在工作