python - 在 Python3 中使用 filter() 从字典值列表中删除一个列表
问题描述
我有一本字典,其中key: str
和value: list
。当键等于某个值并且该列表中的一个元素等于某个值时,我想从其值列表中删除某个列表。
例如,当 时d["A"]=[[0, "APPLE", 1202021, "NEW"], [8, "PEAR", 3242413, "NEW"], [1982, "PEAR", 1299021, "OLD"]]"
,我想d["A"]
从其第二个索引值等于的位置删除列表,3242413
以便键 A 处的新字典变为:d["A"]=[[0, "APPLE", 1202021, "NEW"], [1982, "PEAR", 1299021, "OLD"]]"
。
到目前为止,我尝试使用filter()和dict 理解,但无法想出一个干净的方法来做到这一点。当然,总有一种方法可以循环和删除,但我想知道我们是否可以使用 filter() 实现同样的效果?就像是 :
# d is the dictionary key: str value: list of lists
d["A"] = [[0, "APPLE", 1202021, "NEW"], [8, "PEAR", 3242413, "NEW"], [1982, "PEAR", 1299021, "OLD"]]
# 1. use filter
new_dict = dict(filter(lambda elem: elem[1].. != ,d.items())) # filter out those element inside list value does not equal to 3242413
# 2. use dict comprehension
new_dict = {key: value for (key, value) in d.items() if value ... == }
# so the new dict becomes
d["A"]=[[0, "APPLE", 1202021, "NEW"], [1982, "PEAR", 1299021, "OLD"]]
解决方案
您几乎可以理解字典:
d = {}
d["A"] = [[0, "APPLE", 1202021, "NEW"], [8, "PEAR", 3242413, "NEW"], [1982, "PEAR", 1299021, "OLD"]]
d["B"] = [[0, "APPLE", 1202021, "NEW"], [8, "PEAR", 1, "NEW"], [1982, "PEAR", 3242413, "OLD"]]
d = {k: [i for i in v if i[2] != 3242413] for (k, v) in d.items()}
给出:
{'A': [[0, 'APPLE', 1202021, 'NEW'], [1982, 'PEAR', 1299021, 'OLD']], 'B': [[0, 'APPLE', 1202021, 'NEW'], [8, 'PEAR', 1, 'NEW']]}
推荐阅读
- node.js - 如何在中间件中等待 next()
- javascript - 编译显示模块模式
- c++ - 未解析的外部符号 - GRPC
- cmake - 即使是最新的目标,CMake 是否总是评估安装规则?
- javascript - Javascript - 序列化异步操作
- excel - Vlookup 公式显示 1004 错误。解决方法也失败了
- java - java.lang.ClassNotFoundException: com.mysql.idbc.Driver 问题
- proxy - 如何在不更改名称服务器的情况下使用 cloudflare
- html - 选择子元素 css
- sql - Update Table from another Table in SQL Server 2016, plus "could not be bound" issue