Skip to content
Advertisement

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:

Factory1 - 4 

#reason: Factory1 shows up 4 times, Factory3 shows up 2 and Factory2 once)

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! :)

Advertisement

Answer

When I run this I get 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.

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement