通过其关联值的函数过滤字典键

时间:2014-12-19 15:54:23

标签: python list dictionary count nested

我有这样的字典

my_d = {"a": [1, 2, 2, 5, 2],"b": [2, 1, 2, 4, 5],"c": [7, 2, 2, 6, 2],"d": [7, 2, 2, 2, 1]}

我正在寻找字典值包含" 2且少于2"超过两次。在示例中,那将是" a"," b"," c"," d"。以下代码仅查找字典值包含2次以上的代码:

for key, item in my_d.items():
    if item.count(2) > 2:
        print key,

6 个答案:

答案 0 :(得分:1)

您可以对项目进行排序,并检查前两个元素是否≤2:

>>> for key, item in my_d.items():
...   i=sorted(item)
...   if all(map(lambda x:x<=2,i[:2])):
...     print key,
...
a c b d

或者,因为您只有2个要检查的元素:

>>> for key, item in my_d.items():
...   i=sorted(item)
...   if i[0]<=i[1]<=2:
...     print key,
...
a c b d

答案 1 :(得分:1)

[key for key, item in my_d.items() if len([i for i in item if i<3]) > 2]

答案 2 :(得分:0)

以下内容应该有效,这是一个简单的generator expression

for key, item in my_d.items():
    if len ([x for x in item if x <= 2]) > 2:
        print key

它的作用是构建item中小于或等于2的所有元素的列表,并检查生成列表的长度。

答案 3 :(得分:0)

print [k for k, v in my_d.items() if len(filter(lambda x: x <= 2, v)) > 2] # ['a', 'c', 'b', 'd']

答案 4 :(得分:0)

你可以这样做 -

f1 = lambda x: [obj for obj in x if obj <= 2]

results = [k for k, v in d1.items() if len(f1(v)) >= 2]

在每个值上运行lambda函数

答案 5 :(得分:0)

>>> my_d = {"a": [1, 2, 2, 5, 2],"b": [2, 1, 2, 4, 5],"c": [7, 2, 2, 6, 2],"d": [7, 2, 2, 2, 1],"e":[1,3,4,2,6]}
>>> [k for k,v in my_d.items() if len([i for i in v if i<3])>2]
['a', 'c', 'b', 'd']