如何取元祖里value的key,从最大value开始每5个key为一组保存到列表里,每组不相同,每组里的元素也不相同

tuple = {‘A’: 17, ‘B’: 22, ‘C’: 21, ‘D’: 9, ‘E’: 18, ‘F’: 17, ‘G’: 15, ‘H’: 21, ‘I’: 22, ‘J’: 21, ‘K’: 15, ‘L’: 19,
‘N’: 13, ‘M’: 20, ‘O’: 17, ‘P’: 11, ‘Q’: 21, ‘R’: 16, ‘S’: 16, ‘T’: 14, ‘U’: 11, ‘V’: 23, ‘W’: 12, ‘X’: 19, ‘Y’: 19, ‘Z’: 25}
取元祖里value的key,从最大value开始每5个key为一组保存到列表里,每组不相同,每组里的元素也不相同;

最佳答案

你是怎么算出来 15504 种组合的?

letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

def leeters_5():
    for a in range(26-4):
        for b in range(a+1,26-3):
            for c in range(b+1,26-2):
                for d in range(c+1,26-1):
                    for e in range(d+1,26):
                        yield [letter[a],letter[b],letter[c],letter[d],letter[e]]
l = leeters_5()
count = 0
for i in l:
    # print(i)
    count +=1
print(count)
3个月前 评论
LiTtianS (楼主) 3个月前
讨论数量: 11
Jason990420
from pprint import pprint

a = {
    'A': 17, 'B': 22, 'C': 21, 'D':  9, 'E': 18, 'F': 17, 'G': 15, 'H': 21,
    'I': 22, 'J': 21, 'K': 15, 'L': 19, 'M': 20, 'N': 13, 'O': 17, 'P': 11,
    'Q': 21, 'R': 16, 'S': 16, 'T': 14, 'U': 11, 'V': 23, 'W': 12, 'X': 19,
    'Y': 19, 'Z': 25,
}

b = sorted(a.keys(), reverse=True, key=lambda x:a[x])
c = [tuple(b[i:i+5]) for i in range(0, len(b), 5)]

pprint(c)
[('Z', 'V', 'B', 'I', 'C'),
 ('H', 'J', 'Q', 'M', 'L'),
 ('X', 'Y', 'E', 'A', 'F'),
 ('O', 'R', 'S', 'G', 'K'),
 ('T', 'N', 'W', 'P', 'U'),
 ('D',)]
3个月前 评论
LiTtianS (楼主) 3个月前
Jason990420 (作者) 3个月前

不好意思,是我表达上有问题,我算了一下应该是总共有15504种组合,取元祖里 value 的 key,从最大 value 开始排列选 5 个 key 为一组保存到列表里,如果组内数字调换看成同一组,例如:12345 和 54321 是同一组和。

3个月前 评论
Jason990420

起码有百万组数据以上 ???

应该是总共有 15504 种组合 ???

from pprint import pprint
from itertools import combinations

a = {
    'A': 17, 'B': 22, 'C': 21, 'D':  9, 'E': 18, 'F': 17, 'G': 15, 'H': 21,
    'I': 22, 'J': 21, 'K': 15, 'L': 19, 'M': 20, 'N': 13, 'O': 17, 'P': 11,
    'Q': 21, 'R': 16, 'S': 16, 'T': 14, 'U': 11, 'V': 23, 'W': 12, 'X': 19,
    'Y': 19, 'Z': 25,
}

b = sorted(a.keys(), reverse=True, key=lambda x:a[x])
c = list(map(lambda x:'-'.join(x), combinations(b, 5)))

print(len(c))
pprint(c[::len(c)//10])
65780
['Z-V-B-I-C',
 'Z-C-R-P-U',
 'V-B-H-L-N',
 'V-Q-X-G-T',
 'B-H-J-W-U',
 'I-C-L-T-D',
 'C-H-J-M-A',
 'H-J-E-A-U',
 'J-X-O-R-K',
 'M-F-S-W-D']

从最大 value 开始排列选 5 个 key 为一组保存到列表里 ???

或许问题应该是

任选 5 个 key 为一组, 从最大 value 开始排列, 保存到列表里

3个月前 评论
LiTtianS (楼主) 3个月前

就是跟双色球的排列组合一个道理

3个月前 评论
Jason990420

That's all what I had for you by my knowledge about your question.

3个月前 评论
LiTtianS (楼主) 3个月前

你是怎么算出来 15504 种组合的?

letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

def leeters_5():
    for a in range(26-4):
        for b in range(a+1,26-3):
            for c in range(b+1,26-2):
                for d in range(c+1,26-1):
                    for e in range(d+1,26):
                        yield [letter[a],letter[b],letter[c],letter[d],letter[e]]
l = leeters_5()
count = 0
for i in l:
    # print(i)
    count +=1
print(count)
3个月前 评论
LiTtianS (楼主) 3个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!