一道面試題就能檢驗出你的Python基礎如何,想知道題目是什么嗎?往下看
問:將 data 轉換成 new_data 這種形式,寫出轉換過程。
可以看出,轉換的過程是將 key 的下劃線進行拆分,然后下劃線后邊的字符嵌套在前面字符的值中。
感興趣就打開 IDE,自己先試著解一下。
解題思路
你應該很快想到,主要思路是將下劃線 split 后,然后依次使用字符生成內層字典,當達到最后一個字符時將數字作為值。
那么關鍵點在于,如何不斷地獲得內層字典去修改呢?實際本題就是考察你是否理解 Python 字典是引用傳遞這個特性。
什么是引用傳遞?我們知道 Python 中字典和列表對象都是可變對象,同一個字典對象的變量不管如何傳遞,只要改變其中一個變量會同步修改其他變量。這是因為變量存儲的只是可變對象的引用,無論調用哪個變量,返回的依然是同一個對象。比如:
如上,利用這個特性,將內層字典賦值給一個中間變量,然后改變這個中間變量,即可同步修改最終的 new_data 變量。
根據這個思路,初步代碼如下:
這也是群友給出的第一版答案,這樣寫并沒有多大問題,但是代碼比較繁瑣,肯定還有優化空間。
我們可以只使用一個中間變量即可,進一步優化:
上面這個代碼看似很簡潔了,但是仍然還有兩個 if 判斷,如果不是使用了三元表達式的話,還會更多行。
所以可以進一步優化:
我們省略掉了 last 來判斷最后一個字符的索引,直接通過 keys[:-1] 避開最后一個字符,末尾再單獨生成數字鍵值對。
這里還使用字典的一個內置方法 —— setdefault。
dict.setdefault(key, default=None) 方法和 get 方法類似,只是如果鍵不存在于字典中,不僅會返回 default 參數的值,還同時會用該值自動生成一個鍵值對。
最終我們使用了 6 行代碼就解出該題,這也是接近最簡代碼。
如果使用字典引用的特性是合格分的話,那么當你用出 setdefault 這個方法后,面試官已經給你打了優秀,因此一定要熟悉基礎數據對象的所有內置方法。
最后歡迎大家添加我們的Python技術交流qq群:790693323 加群找管理免費領取學習資料和項目代碼,等你來哦~~~