Python 查找具有相同未知值的所有键

Python 查找具有相同未知值的所有键,python,dictionary,Python,Dictionary,我在互联网上到处寻找,问这样一个问题:如何才能在字典中找到所有具有相同值的键。但这个值还不知道。最接近的结果是,但值是已知的 假设我有一本这样的字典,这些值是完全随机的,不是我硬编码的 {'AGAA': 2, 'ATAA': 5,'AJAA':2} 如何识别具有相同值的所有键?最有效的方法是什么 ['AGAA','AJAA'] 我要做的就是把字典翻过来。我的意思是对每个公共值的键进行分组。因此,如果您从以下内容开始: {'AGAA': 2, 'ATAA': 5, 'AJAA': 2} 您可

我在互联网上到处寻找,问这样一个问题:如何才能在字典中找到所有具有相同值的键。但这个值还不知道。最接近的结果是,但值是已知的

假设我有一本这样的字典,这些值是完全随机的,不是我硬编码的

{'AGAA': 2, 'ATAA': 5,'AJAA':2}
如何识别具有相同值的所有键?最有效的方法是什么

['AGAA','AJAA']
我要做的就是把字典翻过来。我的意思是对每个公共值的键进行分组。因此,如果您从以下内容开始:

{'AGAA': 2, 'ATAA': 5, 'AJAA': 2}
您可能希望将其分组,以便键现在是值,值现在是键:

{2: ['AGAA', 'AJAA'], 5: ['ATAA']}
对值进行分组后,可以使用
max
确定最大分组

例如:

from collections import defaultdict

data = {'AGAA': 2, 'ATAA': 5, 'AJAA': 2}

grouped = defaultdict(list)
for key in data:
    grouped[data[key]].append(key)

max_group = max(grouped.values(), key=len)
print(max_group)
产出:

['AGAA', 'AJAA']
您还可以找到max键并按以下方式打印:

max_key = max(grouped, key=lambda k: len(grouped[k]))
print(grouped[max_key])
我要做的就是把字典翻过来。我的意思是对每个公共值的键进行分组。因此,如果您从以下内容开始:

{'AGAA': 2, 'ATAA': 5, 'AJAA': 2}
您可能希望将其分组,以便键现在是值,值现在是键:

{2: ['AGAA', 'AJAA'], 5: ['ATAA']}
对值进行分组后,可以使用
max
确定最大分组

例如:

from collections import defaultdict

data = {'AGAA': 2, 'ATAA': 5, 'AJAA': 2}

grouped = defaultdict(list)
for key in data:
    grouped[data[key]].append(key)

max_group = max(grouped.values(), key=len)
print(max_group)
产出:

['AGAA', 'AJAA']
您还可以找到max键并按以下方式打印:

max_key = max(grouped, key=lambda k: len(grouped[k]))
print(grouped[max_key])
您可以尝试以下方法:

from collections import Counter

d = {'AGAA': 2, 'ATAA': 5,'AJAA':2}

l = Counter(d.values())
l = [x for x,y in l.items() if y > 1]

out = [x for x,y in d.items() if y in l]
# Out[21]: ['AGAA', 'AJAA']
您可以尝试以下方法:

from collections import Counter

d = {'AGAA': 2, 'ATAA': 5,'AJAA':2}

l = Counter(d.values())
l = [x for x,y in l.items() if y > 1]

out = [x for x,y in d.items() if y in l]
# Out[21]: ['AGAA', 'AJAA']

有什么相同的价值?如果值是可散列的,则很容易创建一个字典,其键是这些值,其值是映射到这些值的键列表。使用
defaultdict(list)
是创建这样一个字典的简单方法。有了这样一个字典,您可以很容易地提取出长度大于1的值列表中的条目。比如说
ATAA
与新键
AZAA
具有相同的值。那就数到二了。只要一个键与另一个键的值匹配,您的预期输出是什么?{2:2} ? 因为值2出现了两次?我在问题的最底部提供了一个输出,值是多少?如果值是可散列的,则很容易创建一个字典,其键是这些值,其值是映射到这些值的键列表。使用
defaultdict(list)
是创建这样一个字典的简单方法。有了这样一个字典,您可以很容易地提取出长度大于1的值列表中的条目。比如说
ATAA
与新键
AZAA
具有相同的值。那就数到二了。只要一个键与另一个键的值匹配,您的预期输出是什么?{2:2} ? 因为值2出现了2次?我在问题的最底层提供了一个输出,这是完美的。伟大的解释和有效的代码。我在感谢评论上贴了一个元问题,我的回答是“Noonno”。我情不自禁,这是完美的。伟大的解释和有效的代码。我在感谢评论上贴了一个元问题,我的回答是“Noonno”。我情不自禁。