一个具有多个值Python的键

时间:2017-11-13 17:02:48

标签: python python-3.x

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}

我不确定下一步

由于

2 个答案:

答案 0 :(得分:2)

collections.Counter会为您提供从项目到计数的映射。您请求的数据结构与该映射相反。在这里,我使用collections.defaultdict来完成逆转,将具有相同计数的项目分组:

from collections import defaultdict, Counter

s = 'IAMDIETINGIEATQUINCEJELLYLOTSOFGROUNDMAIZEGIVESVARIETYICOOKRHUBARBANDSODAWEEPANEWORPUTONEXTRAFLESH__'

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

答案 1 :(得分:0)

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

    from collections import Counter

    bag =('IAMDIETINGIEATQUINCEJELLYLOTSOFGROUNDMAIZEGIVESVARIETYICOOKRHUBARBANDSODAWEEPANEWORPUTONEXTRAFLESH__')
    frequencies = Counter(bag)

    dict1 = {}

    for k, v in frequencies.items():
        dict1[v] = dict1.get(v,[])+[k,]


    print(dict1)

输出:

{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']}
相关问题