有没有一种方法可以搜索列表中有两个特定值的词典?

时间:2020-11-08 13:35:29

标签: python list dictionary

例如

mylist = [{'animal': 'dog', 'price': 30, 'name': 'snowball'}, {'animal': 'cat', 'price': 40, 'name': 'max'}, {'animal': dog, 'price': 30, 'name': 'fido'}]

我知道如何通过使用以下命令查找列表中有多少个字典具有一个参数

n_dogs = sum(x.get('animal') == 'dog' for x in mylist)

列表中的2条狗返回2

现在我将如何查找列表中有多少条狗是价格为30的狗?

非常感谢您的帮助:)

3 个答案:

答案 0 :(得分:0)

n_dogs_price_30 = sum(x.get('animal') == 'dog' and x.get('price') == 30 for x in mylist)

答案 1 :(得分:0)

您可以在生成器表达式中使用条件语句:

dogs = sum(x.get('price') == 30 for x in mylist if x.get('animal') == 'dog')

使用条件语句,它将不考虑不具有key/value"animal":"dog"的条目。如果您更喜欢使用循环而不是上面的单行生成器,那也是完全可能的:

dogs = 0
for x in mylist:
    if x.get('animal') == 'dog' and x.get('price') == 30:
        dogs += 1

答案 2 :(得分:0)

这是我的解决方案:

sum([x['animal'] == 'dog' and x['price'] == 30 for x in mylist])

但是我认为,如果您处理数据,则更优雅的方法是使用pandas:

import pandas as pd

mylist = [{'animal': 'dog', 'price': 30, 'name': 'snowball'}, {'animal': 'cat', 'price': 40, 'name': 'max'}, {'animal': dog, 'price': 30, 'name': 'fido'}]

df = pd.DataFrame(mylist)
print(df[(df.animal == 'dog') & (df.price == 30)])