gpt4 book ai didi

python - 按字典中的值过滤项目

转载 作者:行者123 更新时间:2023-12-03 05:58:33 24 4
gpt4 key购买 nike

我有一个像这样的字典设置:

deck = [{
'name': 'drew',
'lvl': 23,
'items': ['sword', 'axe', 'mana_potion']},
{
'name': 'john',
'lvl': 23,
'items': ['sword', 'mace', 'health_potion']}]

这是一个基本的示例,我需要一种方法来过滤(仅复制 {characters})匹配某些值,例如我只想要 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']}]

当我不知道它是单个值还是值列表或如何过滤时,我不确定如何过滤 k:v 或 k:[v1,v2,v3] 等特定项目多个值。

我不确定如何使用多个键过滤字符。假设我要筛选出 23 级的角色,或者有 items['sword'] 或 items['mace'] 的角色。我如何让它以某种方式排序 filter_cards(deck, ['lvl'=23, 'items'=['sword','mace'])

因此,如果任何角色达到 23 级,或者携带狼牙棒或剑,他们就会出现在该列表中。

最佳答案

你的deck是一个(字典)列表,它没有.items()。所以尝试这样做 - deck.items() 会失败。

还有语法 -

filter_cards(deck, ['lvl'=23, 'items'=['sword','mace'])

无效,您应该使用字典作为第二个元素。示例-

filter_cards(deck, {'lvl':23, 'items':['sword','mace']})

您应该使用 filter() 内置函数,如果字典包含其中一个值,该函数就会返回 True。示例-

def filter_func(dic, filterdic):
for k,v in filterdic.items():
if k == 'items':
if any(elemv in dic[k] for elemv in v):
return True
elif v == dic[k]:
return True
return False

def filter_cards(deck, filterdic):
return list(filter(lambda dic, filterdic=filterdic: filter_func(dic, filterdic) , deck))
<小时/>

演示 -

>>> deck = [{
... 'name': 'drew',
... 'lvl': 23,
... 'items': ['sword', 'axe', 'mana_potion']},{
... 'name': 'john',
... 'lvl': 23,
... 'items': ['sword', 'mace', 'health_potion']},{
... 'name': 'somethingelse',
... 'lvl': 10,
... 'items': ['health_potion']}]
>>>
>>>
>>> filter_cards(deck, {'lvl':23, 'items':['sword','mace']})
[{'lvl': 23, 'items': ['sword', 'axe', 'mana_potion'], 'name': 'drew'}, {'lvl': 23, 'items': ['sword', 'mace', 'health_potion'], 'name': 'john'}]

关于python - 按字典中的值过滤项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32495713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com