如何筛选字典只保留大于某个值的键?

18 投票
8 回答
34188 浏览
提问于 2025-04-16 07:04

我有一个字典,结构如下:

{5:"djdj", 6:"8899", 7:"998kdj"}

这个字典的键是整数类型的,而且没有排序。

现在我想要找出所有键大于等于6的元素。

有没有简单的方法可以做到这一点?

8 个回答

9

这也可以用 filter 来实现。

In [9]: data = {5:"djdj", 6:"8899", 7:"998kdj"}

In [10]: dict(filter(lambda x: x[0] > 5, data.items()))
Out[10]: {6: '8899', 7: '998kdj'}
12

你说的“元素”是什么意思呢?

如果你想要一个包含键值对的字典,并且这些键的值都大于等于6,Python 2.7以上的版本和3.x版本都支持一种叫做字典推导式的写法。

{ k: v for k, v in mydict.items() if k >= 6 }

在早期版本的Python中,你也可以实现这个功能。

dict( (k, v) for k, v in mydict.items() if k >= 6 )  # Python 2.4+
dict([(k, v) for k, v in mydict.items() if k >= 6])  # Python 2.0+

可以通过使用表达式生成器或者列表推导式来做到。

如果你只想要一个键的列表,

[ k for k in mydict.keys() if k >= 6 ]
filter( lambda k: k >= 6, mydict.keys() )

同样的,如果你只想要一个值的列表,

[ v for k, v in mydict.items() if k >= 6 ]
[ mydict[k] for k in mydict.keys() if k >= 6 ]
map( mydict.get, filter( lambda k: k >= 6, mydict.keys() ) )
30

这段代码的意思是,从一个叫做`mydict`的字典里,找出所有键(k)大于等于6的值(v)。

简单来说,就是把字典中符合条件的值提取出来,形成一个新的列表。这里的`mydict.items()`是用来获取字典里的所有键值对,而`if k >= 6`则是用来筛选出那些键大于等于6的项。

撰写回答