1. 程式人生 > >Python:如何從字典的多value中的某個值得到這個多value?

Python:如何從字典的多value中的某個值得到這個多value?

在這裡再次解釋一下題目:

目的:一個字典,存在著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種方法還得迴圈兩次才可以判斷。