筛选python字典中的前3个值

2024-09-26 17:43:57 发布

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

我有一本这样的字典:

mydict = {1: {'shooting': 9,
  'photography': 43,
  'portrait': 17,
  'portraitphotography': 4,
  'model': 40,
  'modeling': 10,
  'lovemyjob': 13,
  'buzzcut': 86}
2: {'lowbun': 18,
  'sleekhair': 4,
  'girl': 94,
  'profile': 4,
  'lips': 31,
  'choker': 16,
  'gold': 16,
  'minimalist': 1}
3: {'chaching': 1,
  'newhair': 20,
  'happy': 31,
  'besthairdresser': 2,
  'hairdresser': 85,
  'treatyoself': 1,
  'loveit': 12,
  'brunette': 36,
  'foils': 325}

我希望获得每个字典中的前3个值,因此它应该如下所示:

{1: {'buzzcut': 86
  'photography': 43,
  'model': 40}
2: {'girl': 94,
  'lips': 31,
  'lowbun': 18}
3: {'foils': 325
  'hairdresser': 85,
  'brunette': 36}

我试过使用 mydict = dict(sorted(mydict.iteritems(), key=operator.itemgetter(1), reverse=True)[:3]) 但是我得到了错误not supported between instances of 'dict' and 'dict'

有人能帮忙吗


Tags: model字典dictmydictgirlportraitshootinglips
3条回答

您可以通过简单的词典理解来实现这一点:

q = {
    j: dict(sorted(
        mydict[j].items(), key=lambda item: item[1], reverse=True)[:3]) 
    for j in mydict
}

结果:

>>> print(q)
{1: {'buzzcut': 86, 'photography': 43, 'model': 40}, 2: {'girl': 94, 'lips': 31, 'lowbun': 18}, 3: {'foils': 325, 'hairdresser': 85, 'brunette': 36}}

使用collections.Counter的简单有效的方法:

>>> {k: dict(Counter(mydict[k]).most_common(3)) for k in mydict}
{1: {'buzzcut': 86, 'photography': 43, 'model': 40},
 2: {'girl': 94, 'lips': 31, 'lowbun': 18},
 3: {'foils': 325, 'hairdresser': 85, 'brunette': 36}}

您可以使用sorted()按值对字典进行排序,它将返回一个元组排序列表,第一个元组包含键,第二个元组包含键的值

sorted_values_1 = sorted(mydict[1].items(), key=lambda x: x[1], reverse=True)
#In this example it will return:
#[('buzzcut', 86), ('photography', 43), ('model', 40), ('portrait', 17), ('lovemyjob', 13), ('modeling', 10), ('shooting', 9), ('portraitphotography', 4)]

把前3个放进字典,你就完成了

counter = 0
top_3_1 = {}
for i in sorted_values_1:
    top_3_1[i[0]] = i[1]
    counter += 1
    if counter == 3:
        break

print(top_3_1)
#Output: {'buzzcut': 86, 'photography': 43, 'model': 40}

相关问题 更多 >

    热门问题