#python #python-3.x #dictionary #lambda
Вопрос:
У меня есть словарь, где его key: str
и value: list
. Я хочу удалить определенный список из его списков значений, когда ключ равен определенному значению, а один элемент внутри этого списка равен определенному значению.
Например, когда d["A"]=[[0, "APPLE", 1202021, "NEW"], [8, "PEAR", 3242413, "NEW"], [1982, "PEAR", 1299021, "OLD"]]"
я хочу удалить список , d["A"]
где его 2-е значение индекса равно 3242413
, чтобы новый словарь в ключе A стал: d["A"]=[[0, "APPLE", 1202021, "NEW"], [1982, "PEAR", 1299021, "OLD"]]"
.
До сих пор я пытался использовать filter() и понимание диктовки, но не смог придумать чистый способ сделать это. Конечно, всегда есть способ зациклить и удалить, но мне интересно, сможем ли мы добиться того же с помощью 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"]]
Ответ №1:
Вы почти достигли понимания словаря:
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']]}