У меня есть установка ДИКТ так:элементов фильтра по значению в Словаре
deck = [{
'name': 'drew',
'lvl': 23,
'items': ['sword', 'axe', 'mana_potion']},
{
'name': 'john',
'lvl': 23,
'items': ['sword', 'mace', 'health_potion']}]
Это простой пример того, что он выглядит, мне нужен способ фильтрации (копировать только {символов}), что соответствуют определенным значениям, например, я хочу, чтобы были только персонажи уровня 23, или которые несут меч.
Я смотрел на делать что-то вроде этого:
filtered = filter_deck(deck, 'mace')
def filter_deck(self, deck, filt):
return [{k:v for (k,v) in deck.items() if filt in k}]
и возвращение:
filtered = [{
'name': 'john',
'lvl': 23,
'items': ['sword', 'mace', 'health_potion']}]
Я не знаю, как фильтровать либо конкретный элемент, как к: V или к: [v1 , v2, v3], когда я не знаю, является ли это одним значением, или списком значений, или как фильтровать несколько значений.
Я не уверен, как я могу фильтровать символы с несколькими ключами. Скажите, что я хочу сортировать персонажей, которые являются lvl 23, или иметь предметы ['sword'] или предметы ['mace']. Как бы я его сортировал в некотором роде filter_cards(deck, ['lvl'=23, 'items'=['sword','mace'])
Так что, если какой-либо персонаж является lvl 23 или несет булаву или меч, они находятся в этом списке.
Вам нужен весь словарь, где слово находится в значении 'items' справа? –
Является ли это 'filter in v' вместо' filter in k' в вашем понимании dict? – xtreak
Для простых значений вы можете попробовать слово 'in'. Если вы хотите знать, что один элемент в списке A присутствует в списке B. Вы можете использовать наборы. 'A = ['mouse', 'mace']' и 'B = ['sword', 'mace']'. Вы можете проверить, носит ли A буйвол или меч «set (A) & set (B)». Кроме того, я считаю, что сам в функции фильтрованной палубы не нужен[email protected] – xtreak