Удалите список из списков значений словаря с помощью функции filter() в Python3

#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']]}