Count items in list and make it a dictionary
This is exactly what a Counter
is for.
>>> from collections import Counter
>>> Counter(['tango', 'bravo', 'tango', 'alpha', 'alpha'])
Counter({'tango': 2, 'alpha': 2, 'bravo': 1})
You can use the Counter
object just like a dictionary, because it is a child class of the builtin dict
. Excerpt from the docs:
class Counter(__builtin__.dict)
Dict subclass for counting hashable items. Sometimes called a bag
or multiset. Elements are stored as dictionary keys and their counts
are stored as dictionary values.
edit:
As requested, here's another way:
>>> names = ['tango', 'bravo', 'tango', 'alpha', 'alpha']
>>> d = {}
>>> for name in names:
... d[name] = d.get(name, 0) + 1
...
>>> d
{'bravo': 1, 'tango': 2, 'alpha': 2}
How do you count elements of a list that's inside a dictionary?
It is what you expected?
files = {"f1": ["cat", "dog", "mouse"],
"f2": ["rat", "elephant", "tiger", "dog"]}
word = "dog"
counter = 0
for values in files.values():
if word in values:
print(True)
counter +=1
else:
print(False)
print(counter)
If a dictionary value is a list, how to count item in that list?
You can try something like this:
dict = {'A': ['red', 'red', 'blue'],
'B': ['red', 'green'],
'C': ['blue', 'green']}
new_dict = {}
for key in dict.keys():
new_dict[key] = {}
for item in dict[key]:
if item not in new_dict[key].keys():
new_dict[key][item] = 1
else:
new_dict[key][item] += 1
print(new_dict)
The output will be:
{'A': {'red': 2, 'blue': 1}, 'B': {'red': 1, 'green': 1}, 'C': {'blue': 1, 'green': 1}}
how to count the number of items in a list which is nested in a dictionary?
You were close, you were just checking the length of the wrong variable...
favourite_languages = {
'Joe': ['French'],
'Jim': ['Spanish', 'Portugese'],
'Alan':['German', 'Swedish']
}
for name, langs in favourite_languages.items():
if not len(langs):
print(f"{name} has no favorite language.")
elif len(langs) == 1:
print(f"{name}'s favourite language is {langs}")
else:
print(f"{name}'s favourite languages are {langs}")
Building a dictionary of counts of items in a list
You can use the group clause in C# to do this.
List<string> stuff = new List<string>();
...
var groups =
from s in stuff
group s by s into g
select new {
Stuff = g.Key,
Count = g.Count()
};
You can call the extension methods directly as well if you want:
var groups = stuff
.GroupBy(s => s)
.Select(s => new {
Stuff = s.Key,
Count = s.Count()
});
From here it's a short hop to place it into a Dictionary<string, int>
:
var dictionary = groups.ToDictionary(g => g.Stuff, g => g.Count);
Count elements in a list without using Counter
Separating the keys and values is a lot of effort when you could just build the dict directly. Here's the algorithm. I'll leave the implementation up to you, though it sort of implements itself.
- Make an empty dict
- Iterate through the list
- If the element is not in the dict, set the value to 1. Otherwise, add to the existing value.
See the implementation here:
https://stackoverflow.com/a/8041395/4518341
Related Topics
Printing List Elements on Separate Lines in Python
How to .Decode('String-Escape') in Python 3
How to Get the Original Variable Name of Variable Passed to a Function
Python: Execute Cat Subprocess in Parallel
Removing Emojis from a String in Python
How to Extract a Single Value from a JSON Response
How to Run a Flask Application
Update Value of a Nested Dictionary of Varying Depth
What Is the Purpose of "Pip Install --User ..."
How to Check If a Word Is an English Word with Python
Comparing Two Numpy Arrays for Equality, Element-Wise
Convert Array of Indices to One-Hot Encoded Array in Numpy
Plotting in a Non-Blocking Way with Matplotlib
Python Try...Except Comma VS 'As' in Except
Python Garbage Collector Documentation
How to Implement an Efficient Bidirectional Hash Table