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



例如

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的狗?

非常感谢您的帮助:(

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

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

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

这是我的解决方案:

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

但我认为,如果你使用数据,更优雅的方法是使用熊猫:

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)])

最新更新