按值对字典排序并忽略某些值

2024-09-27 09:31:18 发布

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

所以有两个任务要同时在字典上执行。在

  1. 对字典进行排序并提取前10个关键字及其值
  2. 在报告前10位时忽略具有特定值的键

例如

my_dict = { 'abc': 10, 'def':20, 'ghi':100, 'jkl':30, 'mno':101}

所以,如果我想要top3,同时忽略值为100和{}的键

^{pr2}$

现在我正在使用以下方法:

my_result = dict(Counter(my_dict).most_common()[:3])

但它有两个问题:

  1. 我不知道如何在表达式中添加筛选器以忽略某些值
  2. 它返回一个字典,其中的键可能是未排序的,尽管它们是前10个值。在

我希望有一种方法可以一次性完成,或者是一种更具Python式和高效的方法,而不是用两个步骤来完成,比如取出我不想要的钥匙,然后进行分类。在

编辑:不需要对整个字典进行排序。我只需要提取前10个结果以及它们的值。在


Tags: 方法字典排序mydef报告关键字jkl
3条回答

过滤数据

[items for items in my_dict.items() if items[1] < 100]

按键值对dict排序

^{pr2}$

把你的解决方案

sorted([items for items in my_dict.items() if items[1] < 100], key=lambda x: -x[1])[:3]

这样做-

>>> my_dict = { 'abc': 10, 'def':20, 'ghi':100, 'jkl':30, 'mno':101}
>>> dict_tuple = my_dict.items()
>>> print dict_tuple
[('jkl', 30), ('abc', 10), ('ghi', 100), ('def', 20), ('mno', 101)]
>>> dict_tuple.sort(key=lambda x: x[1])
>>> print dict_tuple
[('abc', 10), ('def', 20), ('jkl', 30), ('ghi', 100), ('mno', 101)]
 >>> print dict(dict_tuple[:3])
 {'jkl': 30, 'abc': 10, 'def': 20}

和“比尔布朗”的回答差不多。但是使用内置功能并将其分解,以便逐步实现:

Python 3.6.3 (v3.6.3:2c5fed86e0, Oct  3 2017, 00:32:08)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.0.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from collections import OrderedDict

In [2]: my_dict = { 'abc': 10, 'def':20, 'ghi':100, 'jkl':30, 'mno':101}
# filter values out, can be `if v >= 100`(this is depends on condition)
In [3]: filtered_values = ((k, v) for k, v in my_dict.items() if v not in [100, 101])

In [4]: filtered_values
Out[4]: <generator object <genexpr> at 0x1060a9ca8>

In [5]: import operator
# sort by values(second element of key-value tuple) in reverse order
In [6]: top_three = sorted(filtered_values, key=operator.itemgetter(1), reverse=True)[:3]

In [7]: top_three
Out[7]: [('jkl', 30), ('def', 20), ('abc', 10)]

In [8]: OrderedDict(top_three)
Out[8]: OrderedDict([('jkl', 30), ('def', 20), ('abc', 10)])

最后,您将得到您想要的^{}dict具有顺序)。在

相关问题 更多 >

    热门问题