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