我正在开发一个 Django 项目,其中代码检索每个设备和接听线路组合的接听线路计数,并按总计数降序排列。 我正在尝试使用 Django ORM 从我的数据库中检索 Pickup_data_id 值的列表。但是,当我尝试在 defaultdict 对象上使用 .keys() 方法时,我遇到了 AttributeError。
这是我的代码:
from collections import defaultdict
from myapp.models import PickupAnalytics
def most_viewed_pickup_line_by_device(request):
analytics_data = PickupAnalytics.objects.all()
highest_count = defaultdict(int)
for data in analytics_data:
pickup_line_id = data.pickup_data_id
device_id = data.analytics_id
count = PickupAnalytics.objects.filter(pickup_data_id=pickup_line_id, analytics_id=device_id).count()
if count > highest_count[device_id]:
highest_count[device_id] = count
pickup_data_ids = []
for device_id, highest_count in highest_count.items():
pickup_data_ids = PickupAnalytics.objects.filter(analytics_id=device_id, pickup_data_id__in=highest_count.keys()).values_list('pickup_data_id', flat=True).distinct()
return pickup_data_ids
当我运行此代码时,出现以下错误:
属性错误:“int”对象没有属性“keys”
我怀疑这个问题可能与我在最高计数字典上使用 .keys() 的方式有关。有人可以帮助我了解导致此错误的原因以及如何修复它吗?
问题出在这里:
一开始你正在做:
highest_count = defaultdict(int)
现在,在这个循环中
for device_id, highest_count in highest_count.items():
highest_count
是 highest_count.items()
defaultdict 的值
当你做的时候(更改了highest_count的名称以防止重叠):
for device_id, count in highest_count.items():
pickup_data_ids = PickupAnalytics.objects.filter(analytics_id=device_id, pickup_data_id__in=count.keys()).values_list('pickup_data_id', flat=True).distinct()
return pickup_data_ids
尝试打印要调试的值。
看起来
count
是一个整数。
print([(device_id, count) for device_id, count in highest_count.items()]