我有一个数据库,正在编写一个django查询集来循环遍历下面的列
distinct_event_identifier=Plasoevt.objects.values('source_name')
一个source_name可以在列中出现多次。所以我想要一个查询来打印每个唯一的source_name以及它在列中出现的次数。 我希望它以这种格式打印出来:
{ source_name: 'MCUpdate', frequency: 30 },//where frequency is the number of times a particular source_name appears in the column
{ source_name: 'LoadPerf', frequency: 30},
{ source_name: 'WinMgmt', frequency: 30 },
任何人都可以提供见解吗? 此致
答案 0 :(得分:0)
您可以使用annotate:
distinct_event_identifier=Plasoevt.objects.values('source_name').annotate(frequency = Count('source_name'))
答案 1 :(得分:0)
我建议在集合中使用计数器并使用上下文语义来呈现此数据。 (Counter是Python 2.7以后的dict子类)
import collections
创建我们的数据列,这些数据长度为90个项目(我将随机随机播放,因为这可能会模拟您的数据):
import random
event_column = ((['MCUpdate'] * 30) + # This is a list of events that
(['LoadPerf'] * 30) + # will be passed to the Counter
(['WinMgmt'] * 30))
random.shuffle(event_column)
print('length of the column is ' + str(len(event_column))) # i.e. 90
print('first 10 items are:')
print(event_column[:10])
打印:
['WinMgmt', 'MCUpdate', 'LoadPerf', 'LoadPerf', 'WinMgmt',
'MCUpdate', 'WinMgmt', 'MCUpdate', 'MCUpdate', 'MCUpdate']
然后我们计算他们的频率:
event_counts = collections.Counter(event_column)
import pprint
pprint.pprint(event_counts)
打印出来:
Counter({'MCUpdate': 30, 'LoadPerf': 30, 'WinMgmt': 30})
并且
for event, count in event_counts.items(): # use iteritems() in Python 2
print('{event}: {count}'.format(event=event, count=count))
打印
MCUpdate: 30
LoadPerf: 30
WinMgmt: 30
将其放入所需的格式:
redundant_counts = []
for source_name, frequency in event_counts.items():
redundant_counts.append({'source_name': source_name, 'frequency': frequency})
print(redundant_counts)
打印:
[{'source_name': 'WinMgmt', 'frequency': 30}, {'source_name': 'MCUpdate', 'frequency': 30}, {'source_name': 'LoadPerf', 'frequency': 30}]