在 Python 中筛选字典键和值

filtering dictionary keys and values in python

提问人:Elio Baharan 提问时间:12/26/2022 最后编辑:Elio Baharan 更新时间:12/26/2022 访问量:43

问:

我有一个具有相同键的字典列表,我想根据输入字符串中给我的条件过滤这些字典。

我有这个词典列表:

dictlist: [[{'name': '“搏击俱乐部”', '排名': 12, '预算': 450000}, {'name': '“星际穿越”', 'rank': 26, 'budget': 700000}], [{'name': '“se7en”', '排名': 19, '预算': 200000}, {'name': '“汉密尔顿”', 'rank': 107, 'budget': 650000}]]

我从用户那里收到条件,例如:

SELECT (name,budget) FROM movies WHERE budget=450000

SELECT (name,budget) FROM movies WHERE 排名>10

SELECT (name,budget,rank) FROM movies WHERE name=='搏击俱乐部'

不幸的是,我无法为此编写代码来过滤我的字典列表。

感谢您对我的帮助。

Python 字典 筛选器

评论

1赞 realFishSam 12/26/2022
您有一个列表列表
1赞 Elio Baharan 12/26/2022
实际上,有 1 个列表包含 2 个字典列表
0赞 realFishSam 12/26/2022
我不确定,但看起来您确实在尝试在 Python 中做数据库的事情。我建议研究一下MongoDB,特别是因为你似乎喜欢JSON/字典格式;)
0赞 Community 12/26/2022
请提供足够的代码,以便其他人可以更好地理解或重现问题。
0赞 Elio Baharan 12/26/2022
我编辑了它。我尽力了。

答:

1赞 realFishSam 12/26/2022 #1

我写了这个:

dictlist = [
    [{'name': '"fight club"', 'rank': 12, 'budget': 450000}, {'name': '"Interstellar"', 'rank': 26, 'budget': 700000}], 
    [{'name': '"se7en"', 'rank': 19, 'budget': 200000}, {'name': '"Hamilton"', 'rank': 107, 'budget': 650000}]
    ]

def greaterThanFilter(filterName, filterValue, dictlist):
    for i in dictlist:
        for j in i:
            if j[filterName] > filterValue:
                print(j['name'])
    
greaterThanFilter('budget', 200000, dictlist)

这只能检查一个值是否大于另一个值。

修改此代码应该对您有所帮助。我建议你把你的词典列表重组成这样:

dictlist = [
    {'name': '"fight club"', 'rank': 12, 'budget': 450000}, 
    {'name': '"Interstellar"', 'rank': 26, 'budget': 700000}, 
    {'name': '"se7en"', 'rank': 19, 'budget': 200000}, 
    {'name': '"Hamilton"', 'rank': 107, 'budget': 650000}
    ]

以相同方式筛选列表的代码如下所示:

def greaterThanFilter(budget, dictlist):
    return [x for x in dictlist if x['budget'] > budget]

# Output: ['"Interstellar"', '"Hamilton"']

评论

0赞 realFishSam 12/26/2022
您可以修改过滤器以执行其他操作,例如检查匹配的名称或高于或低于某物的排名。有很大的改进/功能实现空间。你明白了!
0赞 Elio Baharan 12/26/2022
非常感谢你,但不幸的是,由于我的错,它无法帮助我。实际上,该条件尚不清楚它是大于还是小于或等于。我们从用户那里得到确切的条件,例如,它可以是 rank>2。而且因为我是根据两个不同的列表创建这个字典的,所以我无法更改维度
0赞 realFishSam 12/26/2022
你需要什么?如果你需要匹配名称,你可以使用类似 “ return [x for x in dictlist if x['budget'] > budget and x['name'] == ”moviename here”