[英]Frequency count given a dictionary and list
I am attempting to perform a frequency given a dictionary with a master list containing other dictionaries.我正在尝试执行给定字典的频率,其中包含包含其他字典的主列表。 Here is my data:这是我的数据:
dict = {"costcenters": [{"facid": "A1990", "cc": "postpress", "name": "Factory1"},
{"facid": "A1981", "cc": "prepress", "name": "Factory3"},
{"facid": "A1990", "cc": "prepress", "name": "Factory1"},
{"facid": "A1981", "cc": "prepress", "name": "Factory3"},
{"facid": "A1990", "cc": "postpress", "name": "Factory1"},
{"facid": "A1990", "cc": "digitalpress", "name": "Factory1"},
{"facid": "A7881", "cc": "digitalpress", "name": "Factory2"}]
I want to return the Factory with the most cost centers, so in my abbreviated example here, I would want the for loop to return:我想返回成本中心最多的工厂,所以在我这里的缩写示例中,我希望 for 循环返回:
Factory1 - 4
#reason: Factory1 shows up 4 times, Factory3 shows up 2 and Factory2 once) #reason:Factory1 出现了 4 次,Factory3 出现了 2 次,Factory2 出现了一次)
I don't need it broken down any further.我不需要它进一步分解。 I have tried the following but am struggling with accessing a list with dictionaries inside and ultimately the 'name' key.我尝试了以下操作,但正在努力访问内部包含字典的列表以及最终的“名称”键。
elements_count = {}
for cc in dict:
if cc in elements_count:
elements_count[cc] += 1
else:
elements_count[cc] = 1
print(max(elements_count))
Nothing prints when I run this, so I don't have any error messages to share.运行此程序时不会打印任何内容,因此我没有任何错误消息可共享。 The simplest solution would be best so that I can understand how to capture frequencies in the future.最简单的解决方案是最好的,这样我就可以了解将来如何捕获频率。 Thank you!谢谢! :) :)
When I run this I get costcenters
.当我运行它时,我得到了costcenters
。
I think you want to do:我想你想做:
import sys
data = {"costcenters": [{"facid": "A1990", "cc": "postpress", "name": "Factory1"},
{"facid": "A1981", "cc": "prepress", "name": "Factory3"},
{"facid": "A1990", "cc": "prepress", "name": "Factory1"},
{"facid": "A1981", "cc": "prepress", "name": "Factory3"},
{"facid": "A1990", "cc": "postpress", "name": "Factory1"},
{"facid": "A1990", "cc": "digitalpress", "name": "Factory1"},
{"facid": "A7881", "cc": "digitalpress", "name": "Factory2"}]}
elements_count = {}
for cc in data["costcenters"]:
factory = cc["name"]
if factory in elements_count:
elements_count[factory] += 1
else:
elements_count[factory] = 1
max_value=0
min_value=sys.maxsize*sys.maxsize
for item in elements_count:
if elements_count[item] > max_value:
max_value = elements_count[item]
factory_max = item
elif elements_count[item] < min_value:
min_value = elements_count[item]
factory_min = item
print(f'Maximum Value: {factory_max} - {max_value}')
print(f'Minimum Value: {factory_min} - {min_value}')
Output:输出:
Maximum Value: Factory1 - 4
Minimum Value: Factory2 - 1
This assumes your number of factories is no bigger than sys.maxsize
squared (you're talking many billions here), but obviously this could be changed for the largest realistic number.这假设您的工厂数量不大于sys.maxsize
平方(您在这里谈论的是数十亿),但显然这可以更改为最大的实际数字。
A fairly simple solution for this problem could be:这个问题的一个相当简单的解决方案可能是:
my_dict = {"costcenters": [{"facid": "A1990", "cc": "postpress", "name": "Factory1"},
{"facid": "A1981", "cc": "prepress", "name": "Factory3"},
{"facid": "A1990", "cc": "prepress", "name": "Factory1"},
{"facid": "A1981", "cc": "prepress", "name": "Factory3"},
{"facid": "A1990", "cc": "postpress", "name": "Factory1"},
{"facid": "A1990", "cc": "digitalpress", "name": "Factory1"},
{"facid": "A7881", "cc": "digitalpress", "name": "Factory2"}]}
counter_dict = {}
for key in my_dict["costcenters"]:
counter_dict[key["name"]] = counter_dict.get(key["name"], 0) + 1
max_factory = max(counter_dict, key = counter_dict.get)
print(f"{max_factory}:", counter_dict[f"{max_factory}"])
The output will be:输出将是:
Factory1: 4
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.