Python 一个键具有多个值

Python 一个键具有多个值,python,python-3.x,Python,Python 3.x,我应该怎么做才能做出如下输入 bag =('IAMDIETINGIEATQUINCEJELLYLOTSOFGROUNDMAIZEGIVESVARIETYICOOKRHUBARBANDSODAWEEPANEWORPUTONEXTRAFLESH__') (引用作为键,对应字母作为值) 到目前为止,我所做的是 dic1 = {1: {'Q', 'Z', 'X', 'K', 'J'}, 2: {'F', '_', 'P', 'C', 'M', 'W', 'Y', 'B', 'V', 'H'}, 3

我应该怎么做才能做出如下输入

bag =('IAMDIETINGIEATQUINCEJELLYLOTSOFGROUNDMAIZEGIVESVARIETYICOOKRHUBARBANDSODAWEEPANEWORPUTONEXTRAFLESH__')
(引用作为键,对应字母作为值)

到目前为止,我所做的是

dic1 = {1: {'Q', 'Z', 'X', 'K', 'J'}, 2: {'F', '_', 'P', 'C', 'M', 'W', 'Y', 'B',   'V', 'H'}, 3: {'G'}, 4: {'U', 'D', 'L', 'S'}, 6: {'N', 'R', 'T'}, 8: {'O'}, 9: {'I', 'A'}, 12: {'E'}}
我不确定下一步该怎么办


谢谢

您可以计算频率,然后按相似的频率分组:

freq = {i:bag.count(i) for i in set(bag)} 
 {'U': 4, '_': 2, 'C': 2, 'K': 1, 'D': 4, 'T': 6, 'Q': 1, 'V': 2, 'A': 9, 'F': 2, 'O': 8, 'J': 1, 'I': 9, 'N': 6, 'P': 2, 'S': 4, 'M': 2, 'W': 2, 'E': 12, 'Z': 1, 'G': 3, 'Y': 2, 'B': 2, 'L': 4, 'R': 6, 'X': 1, 'H': 2}
输出:
collections.Counter
将为您提供从项目到计数的映射。您请求的数据结构与该映射相反。在这里,我使用一个
collections.defaultdict
来完成反转,将具有相同计数的项目分组到集合中:

{1: ['Q', 'J', 'Z', 'K', 'X'], 2: ['M', 'C', 'Y', 'F', 'V', 'H', 'B', 'W', 'P', '_'], 3: ['G'], 4: ['D', 'U', 'L', 'S'], 6: ['T', 'N', 'R'], 8: ['O'], 9: ['I', 'A'], 12: ['E']}

首先制作一本字典,其键为字母,值为引用。然后循环创建反向字典。StackOverflow希望您这样做,我们也这样做。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅,并使用:)获取该命令,我将数据放入计数器。然后您只需要“反转”计数器中的键和值。如果您已经在使用
集合
,那么除了值类型(set和list)之外,不使用
defaultdict
似乎很愚蠢到目前为止,这似乎是更好的答案。
ct.defaultdict(set)
d[n].add(k)
将重现OP的输出。@pylang:捕捉得好。更新为使用
set
{1: ['Q', 'J', 'Z', 'K', 'X'], 2: ['M', 'C', 'Y', 'F', 'V', 'H', 'B', 'W', 'P', '_'], 3: ['G'], 4: ['D', 'U', 'L', 'S'], 6: ['T', 'N', 'R'], 8: ['O'], 9: ['I', 'A'], 12: ['E']}
from collections import defaultdict, Counter

s = 'IAMDIETINGIEATQUINCEJELLYLOTSOFGROUNDMAIZEGIVESVARIETYICOOKRHUBARBANDSODAWEEPANEWORPUTONEXTRAFLESH__'

d = defaultdict(set)
for k, n in Counter(s).items():
    d[n].add(k)