這個問題是在寫介面自動化程式的程序中,有個場景希望能通過字典的value獲取對應的key,在網上找到了解決方案,這里自己加一些注解放出來,希望能讓大家明白是如何實作的,
網友的原代碼形式如下
def getDictKey_1(myDict, value): return [k for k, v in myDict.items() if v == value]
代碼特別簡潔,回傳一個串列,但是可能有些同學不太明白如何實作的,下面對該代碼進行一個變裝:
def getDictKey_2(myDict, value): keyList = [] for k, v in myDict.items(): if v == value: keyList.append(k) return keyList
上面這兩個代碼的效果是一樣的,測驗結果如下
d = {'中國':'北京', '首都':'北京', '河南':'鄭州', '余額': 0.01} print("getDictKey_1(d, '北京')=", getDictKey_1(d, '北京')) print("getDictKey_1(d, '鄭州')=", getDictKey_1(d, '鄭州')) print("getDictKey_1(d, 0.01)=", getDictKey_1(d, 0.01)) print("getDictKey_1(d, '0.01')=", getDictKey_1(d, '0.01')) print("getDictKey_2(d, '北京')=", getDictKey_2(d, '北京')) print("getDictKey_2(d, '鄭州')=", getDictKey_2(d, '鄭州')) print("getDictKey_2(d, 0.01)=", getDictKey_2(d, 0.01)) print("getDictKey_2(d, '0.01')=", getDictKey_2(d, '0.01')) 執行結果: getDictKey_1(d, '北京')= ['中國', '首都'] getDictKey_1(d, '鄭州')= ['河南'] getDictKey_1(d, 0.01)= ['余額'] getDictKey_1(d, '0.01')= [] getDictKey_2(d, '北京')= ['中國', '首都'] getDictKey_2(d, '鄭州')= ['河南'] getDictKey_2(d, 0.01)= ['余額'] getDictKey_2(d, '0.01')= []
那么,為什么這樣就可以獲取到key呢?重點就在于字典的items()這個方法的回傳值上,見下面的代碼
d = {'中國': '北京', '首都': '北京', '河南': '鄭州', '余額': 0.01} print(d.items()) 結果 dict_items([('中國', '北京'), ('首都', '北京'), ('河南', '鄭州'), ('余額', 0.01)])
可以看到,items()方法會遍歷字典的每個key-value鍵值對并將每個鍵值對以元組的形式保存,其中key為第一個元素,value為第二個元素,即(key, value),并且會將所有的鍵值對元組以串列的形式回傳,因此可以對items()回傳值的串列進行遍歷后處理(key, value)就可以得到想要的key,需要注意的是,一個value可能會對應多個key,
容錯處理
上面兩個函式在正常傳參的情況下可以正確回傳想要的結果,但是如果第一個引數myDict不是字典形式,就會拋出例外,如下:
d = "{'中國':'北京', '首都':'北京', '河南':'鄭州', '余額': 0.01}" print("getDictKey_1(d, '北京')=", getDictKey_1(d, '北京')) 結果: Traceback (most recent call last): File "E:/feedback_record/test.py", line 131, in <module> print("getDictKey_1(d, '北京')=", getDictKey_1(d, '北京')) File "E:/feedback_record/test.py", line 99, in getDictKey_1 return [k for k, v in myDict.items() if v == value] AttributeError: 'str' object has no attribute 'items'
很好處理,做個判斷就可以了,如下:
def getDictKey_3(myDict, value): if not isinstance(myDict, dict): return False keyList = [] for k, v in myDict.items(): if v == value: keyList.append(k) return keyList d = "{'中國':'北京', '首都':'北京', '河南':'鄭州', '余額': 0.01}" print("getDictKey_3(d, '北京')=", getDictKey_3(d, '北京')) 結果: getDictKey_3(d, '北京')= False
注意:
大家正式使用的時候,要做個判斷,正確回傳了key時再繼續往下執行,
愿你我相遇,皆有所獲! 歡迎關注微信公眾號:【傷心的辣條】
1.免費領取一份216頁軟體測驗工程師面試寶典檔案資料,
2.軟體測驗學習路線以及相對應的視頻學習教程免費分享!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/240789.html
標籤:其他
上一篇:介面測驗用例撰寫和測驗關注點
下一篇:聊一聊軟體測驗的方法
