Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过关联值的函数筛选字典键_Python_List_Dictionary_Count_Nested - Fatal编程技术网

Python 通过关联值的函数筛选字典键

Python 通过关联值的函数筛选字典键,python,list,dictionary,count,nested,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 ke

我有一本这样的字典

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,

下面的方法应该有效,这是一个简单的方法

对于键,my_d.items()中的项:
if len([x表示项目中的x,如果x 2:
打印键

它所做的是建立
项中小于或等于2的所有元素的列表,并检查生成的列表的长度。

您可以对项目进行排序,并检查前两个元素是否正确≤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
>>对于my_d.items()中的项,键:
…i=已排序(项目)
…如果全部(映射(lambda x:x>>用于键,my_d.items()中的项):
…i=已排序(项目)
…如果我[0]
在我的d.items()中打印[k代表k,v(),如果len(过滤器(lambda x:x2)][a',c',b',d']

您可以这样做-

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

results = [k for k, v in d1.items() if len(f1(v)) >= 2]
f1=lambda x:[obj=2时x中obj的obj]
它对每个值运行lambda函数

[key for key,item in my_d.items()if len([i for i in item if i 2]
[key for key, item in my_d.items() if len([i for i in item if i<3]) > 2]
>>我的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代表k,v在my_d.items()中如果len([i代表i在v中如果i2]
['a','c','b','d']

注意:这个答案的时间和内存复杂性最差。我认为这与列表在dict中这一事实没有多大关系,而更多的是一个关于列表中某些特定项目计数的问题。换句话说,对于满足某个标准的关联值,返回dict键的部分是微不足道的脚本有点模棱两可。是否希望
[1,2,3,4]
要匹配标准?它有两个数字=2倍。不知道,该代码对问题中的字典非常有效。但我有一个大约32000行52列的数据集。我已经将其导出到字典中。当我为这么大的字典测试代码时,它给出了以下错误:ValueError:太多值无法解包。@ali th错误可能是由其他原因引起的:不知道。我想我刚刚发现了问题。当我制作字典时,值应该是字符串而不是整数:my_d={“a”:['1','2','2','5','2','2','2','2','b:['2','1','2','4','5','c:['7','2','2','2','1','e:['1','3','4','2','6']}。我使用了int()函数但不起作用将字符串与整数进行比较不会导致
ValueError
print [k for k, v in my_d.items() if len(filter(lambda x: x <= 2, v)) > 2] # ['a', 'c', 'b', 'd']
f1 = lambda x: [obj for obj in x if obj <= 2]

results = [k for k, v in d1.items() if len(f1(v)) >= 2]
[key for key, item in my_d.items() if len([i for i in item if i<3]) > 2]
>>> 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']