python 查找字典里有相同值value的键key


dic = {10: False, 
       11: 8, 
       12: 7, 
       7: False, 
       8: 6, 
       9: 6, 
       4: False, 
       5: 6, 
       6: 7, 
       1: False, 
       2: 13, 
       3: 5}

想要找到dic里有相同值(不包含False)的键,
范例中找到的应该是:
key:8、9、5,因为他们的值都是6;
key:12、6,因为他们的值都是7。
字典的键都是固定的1-12,值不是固定的,该怎么操作呢?

代码如下:

dic = {10: False,
       11: 8,
       12: 7,
       7: False,
       8: 6,
       9: 6,
       4: False,
       5: 6,
       6: 7,
       1: False,
       2: 13,
       3: 5}


result = []
_dict = {}
for key, value in dic.items():
    if not value:
        continue
    if value not in _dict.keys():
        _dict[value] = []
    _dict[value].append(key)

for key, value in _dict.items():
    if len(value) > 1:
        _str = ",".join([str(x) for x in value])
        print("dic里有相同值(不包含False)的值{key}的键为:{values}".format(key=key, values=_str))

输出为

dic里有相同值(不包含False)的值7的键为:12,6
dic里有相同值(不包含False)的值6的键为:8,9,5

 
from typing import Dict, List


dic = {10: False, 
       11: 8, 
       12: 7, 
       7: False, 
       8: 6, 
       9: 6, 
       4: False, 
       5: 6, 
       6: 7, 
       1: False, 
       2: 13, 
       3: 5}

result:Dict[int, List[int]]  = {}

# 根据值分类
for key, value in dic.items():
    if not value:
        continue
    if value not in result.keys():
        result[value] = []
    result[value].append(key)

# 获取分类出来的字典的长度大于1的
for key, value in result.items():
    if len(value) > 1:
        print("有相同值(不包含False)的值{key}的键为:{values}".format(key=key, values=value))
for i in set(dic.values()):
    tmp = []
    for k,v in dic.items():
        if v==i and v:
            tmp.append(str(k))
    if len(tmp)>1:
        print(i,':',' '.join(tmp))

'''--result:
6 : 8 9 5
7 : 12 6
'''

给一种通过推导式实现的方式,仅供参考:

dic = {10: False, 11: 8, 12: 7, 7: False, 8: 6, 9: 6, 4: False, 5: 6, 6: 7, 1: False, 2: 13, 3: 5}
d = {v:[k for k in dic.keys() if dic[k]==v] for v in [v for v in set(dic.values()) if v!=False] if len([k for k in dic.keys() if dic[k]==v])>1}
print(d)

img