简体   繁体   English

给定字典和列表的频率计数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM