当前位置: 首页 > 知识库问答 >
问题:

筛选列表字典

明利
2023-03-14

我有一个形式的字典:{"level":[1,2,3],"conf":[-1,1,2],"text":["here","hel","llo"]}

我想过滤列表,以删除索引i中的每一项,其中索引i中的conf不是

输出应如下所示:

{“level”:[2,3],“conf”:[1,2],文本:[“hel”,“llo”]}

因为conf的第一个值不是

我试过这样的方法:

new_dict = {i: [a for a in j if a >= min_conf] for i, j in my_dict.items()}

但这只适用于一把钥匙。

回复:下面有很多好的解决方案。我只是在想另一个。

  • 将这个列表结构转换成一个元组列表:元组=[(1,-1,"here"),(2,1,"hel"),(3,"2","llo")]
  • 然后我只需要通过每个元组的第二个项目来过滤这个列表,这很容易:filter(lambda项目:项目[1]

共有3个答案

胥良平
2023-03-14

我用这个解决了它:

from typing import Dict, List, Any, Set

d = {"level":[1,2,3], "conf":[-1,1,2], "text":["-1","hel","llo"]}

filtered_indexes = set([i for i in range(len(d.get('conf', []))) if d.get('conf')[i] > 0])

def filter_dictionary(d: Dict[str, List[Any]], filtered_indexes: Set[int]) -> Dict[str, List[Any]]:
    for key, list_values in d.items():
        d[key] = [value for i, value in enumerate(list_values) if i in filtered_indexes]
    return d

print(filter_dictionary(d, filtered_indexes))

输出:

{'level': [2, 3], 'conf': [1, 2], 'text': ['hel', 'llo']}
史默
2023-03-14

我将保留有效元素(大于0的元素)的索引:

kept_keys = [i for i in range(len(my_dict['conf'])) if my_dict['conf'][i] > 0]

然后,您可以过滤每个列表,检查列表中某个元素的索引是否包含在keep_keys中:

{k: list(map(lambda x: x[1], filter(lambda x: x[0] in kept_keys, enumerate(my_dict[k])))) for k in my_dict}

输出:

{'level': [2, 3], 'conf': [1, 2], 'text': ['hel', 'llo']}
惠文彬
2023-03-14

尝试:

from operator import itemgetter


def filter_dictionary(d):
    conf = d['conf']
    positive_indices = [i for i, item in enumerate(conf) if item > 0]
    f = itemgetter(*positive_indices)
    return {k: list(f(v)) for k, v in d.items()}


d = {"level": [1, 2, 3], "conf": [-1, 1, 2], "text": ["-1", "hel", "llo"]}
print(filter_dictionary(d))

输出:

{'level': [2, 3], 'conf': [1, 2], 'text': ['hel', 'llo']}

我试着先看看'conf'的哪些索引是正的,然后用itemgetter从字典中的值中选择这些索引。

 类似资料:
  • 本文向大家介绍Kotlin 筛选列表,包括了Kotlin 筛选列表的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 列表筛选可以对地图中的数据按照事先设置好的列表模板进行查询。在第一次点击列表筛选时,会进入筛选定制页面,如下图: 点击确认后,开始进行筛选设置:点击新增按钮,可对某个字段添加筛选要求,添加后然后选择条件旁边加号按钮,以设置对某一列的具体筛选要求。 如上图的筛选条件为“名称包含迪亚”的售点,继续单击加号可以对名称列继续添加条件。如果需要对其他字段进行筛选,可以再次单击新增按钮增加条件,点击确定及保存

  • 我需要过滤一个列表

  • 所以我知道我可以过滤 JPA中具有findByProperty的特定属性 但是如果我有一组字符串,我如何过滤呢?我不能对一组字符串使用\u属性,因为字符串没有属性? 假设我有以下实体: 和另一个属性为字符串的类: 这是我的存储库:

  • 我正在使用谷歌表单的过滤功能,但无法按我想要的方式使用,已经3天了。。。 基本上,我有第1页,有一列“电子邮件”和一列“潜在客户ID”。表2具有相同的“潜在客户ID”,但已过滤。含义,第1页,其“顺序为1,2,3,4,5…”。。。第二张不是,像是2,4,5,23,41。。。我想在表1中找到正确的电子邮件地址,该地址在两个表中具有相同的Lead ID。我使用了Filter函数,它工作得非常好,因为它

  • 如何使用RxJava过滤项目列表? 我有以下代码,发出: 并且我想在之后应用筛选器。您可以在下一段代码中看到我的解决方案,但也许还有更好的方法?