如何在字典中返回相同长度的值?

2024-05-19 05:52:11 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我有以下字典,带有一个键,还有dictionary类型的值:

db = {
    'john'  : {'a': 13, 'b': 64, 'c': 43},
    'eric'  : {'a': 63, 'b': 12},
    'kek'   : {'a': 43, 'b': 37, 'c': 83, 'd': 87},
    'rick'  : {'a': 77, 'b': 66, 'c': 44},
    'alex'  : {'a': 44, 'b': 99, 'c': 22}
}

如何返回值部分中具有相同项数的一组所有键?在上面的字典中,键:johnrickalex都有相同数量的键。所以输出将包括这些。你知道吗

预期输出:

same = {john, rick, alex}

这是到目前为止我的代码,我不确定如何存储当前长度:

db = {
    'john': {'a': 13, 'b': 64, 'c': 43},
    'eric': {'a': 63, 'b': 12},
    'kek': {'a': 43, 'b': 37, 'c': 83, 'd': 87},
    'rick': {'a': 77, 'b': 66, 'c': 44},
    'alex': {'a': 44, 'b': 99, 'c': 22}
}

def maximum(db):
    same = {}
    for key, value in db.items():
        for values in value:
            if len(values) == 'something':
                pass

maximum(db)

Tags: in类型fordbdictionary字典valuejohn
3条回答

因为OP说他需要长度相同的keys,所以这个长度必须是最常出现的长度(当然这是一个假设,但是OP没有阐明这一点)。例如,可能有两个长度为2或3的集合,所以我们应该输出与哪个值长度相对应的keys?2或3?)你知道吗

db = {'john': {'a': 13, 'b': 64, 'c': 43}, 
      'eric': {'a': 63, 'b': 12}, 
      'kek': {'a': 43, 'b': 37, 'c': 83, 'd': 87}, 
      'rick': {'a': 77, 'b': 66, 'c': 44}, 
      'alex': {'a': 44, 'b': 99, 'c': 22} }

from collections import Counter
elem_len = [len(r) for k,r in db.items()]
c = Counter(elem_len)
most_common_length = c.most_common(1)[0][0]
print(most_common_length)
    3

elements = [k for k,r in db.items() if len(r)==most_common_length]
print(elements)
    ['john', 'rick', 'alex']

当我输入以下代码时,我得到了您的输出:

def maximum(db):
    for key, value in db.items():
        if len(value) == 3:
            print(key)

maximum(db)

当然,输入适合您需要的内容,而不是print()。你知道吗

试试这个,你可以在结果中找到你的愿望:

from itertools import groupby

result = []
for i,j in groupby(sorted(db.items(), key = lambda x:len(x[1])), lambda x:len(x[1])):
    result.append({i:[k[0] for k in j]})

结果将是:

[{2: ['eric']}, {3: ['john', 'rick', 'alex']}, {4: ['kek']}]

keys是项的lenvalues是具有该长度的项。你知道吗

相关问题 更多 >

    热门问题