如何筛选字典只保留大于某个值的键?
我有一个字典,结构如下:
{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的项。