在这里再次解释一下题目:
目的:一个字典,存在着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种方法还得循环两次才可以判断。