Python:如何從字典的多value中的某個值得到這個多value?
阿新 • • 發佈:2018-11-26
在這裡再次解釋一下題目:
目的:一個字典,存在著1key多value的現象,如果根據多value中的值,找到這個key,並且得到這個key對應的所有value?
比如我們這裡有一個字典:
mydict = {'george':16,'amber':[19, 20]}
我們想根據19,得到19和20。
我這裡提供2種方法:
①:直接上程式碼,思路比較簡單。
# 找到19這個value在巢狀List中是第幾個 for idx_temp, list_value in enumerate(list(mydict.values())): if isinstance(list_value, int): # 如果元素是int型別,則跳過。因為int型別無法用in語法 continue if 19 in list_value: idx = idx_temp break print(mydict[list(mydict.keys())[idx]]) ''' [19, 20] '''
②:先對mydict 進行改造,形成如下dict:
mydict1 = {'16':'george','19':'amber','20':'amber'}
然後建立一個反向dict,即利用set把原來的key和value轉置過來:
mydict1_inverted = {} for key, value in mydict1.items(): if value not in mydict1_inverted: mydict1_inverted[value] = set([key]) else: mydict1_inverted[value].add(key) mydict1_inverted ''' {'amber': {'19', '20'}, 'george': {'16'}} ''' mydict1_inverted['amber'] ''' {'19', '20'} '''
我們把資料存成mydict1這種字典的話,第2種方法對比第1種方法佔得記憶體大(又申請了一個mydict1_inverted ),但是在某些應用下就比較快,比如我們想查詢19和20對應的是不是一個key:第2種方法直接利用mydict1就可以查詢,而第1種方法還得迴圈兩次才可以判斷。