Dec-28-2021, 12:37 AM
Hi perfringo,
I acknowledge all your criticisms. However, do understand that:
1. This was an exercise provided to me by an instructor and my only task was to find my way out.
2. I'm still learning...perfection is gained with time.
With all the variations of coding this one program I understand the logic in all of them but I haven't reached that level yet. Additionally yours is the simplest so far. I do pray to reach your level of experience/expertise.
Cheers,
I acknowledge all your criticisms. However, do understand that:
1. This was an exercise provided to me by an instructor and my only task was to find my way out.
2. I'm still learning...perfection is gained with time.
With all the variations of coding this one program I understand the logic in all of them but I haven't reached that level yet. Additionally yours is the simplest so far. I do pray to reach your level of experience/expertise.
Cheers,
(Dec-25-2021, 09:05 AM)perfringo Wrote: I think that there are several things that could be improved.
Naming: there is no key, value in tuple and therefore such naming is misleading (this tuple actually has string and dictionary in it). If you want to unpack the tuple then give meaningful names, in this case it could befor email, record in data:
No need to build separate/temporary list: Counter plays nicely with other parts of Python so one can feed generator or list comprehension directly to it.
So alternatively it can be written as:
from collections import Counter data = [('[email protected]',{'first_name':'john','last_name':'doe'}), ('[email protected]',{'first_name':'jane','last_name':'doe'}), ('[email protected]',{'first_name':'derek','last_name':'zoolander'}), ('[email protected]',{'first_name':'murph','last_name':'cooper'}), ('[email protected]',{'first_name':'ned','last_name':'stark'})] last_names = Counter(row[1]['last_name'] for row in data) print(*(f'{k}: {v}' for k, v in last_names.items()), sep='\n')
Output:doe: 2 zoolander: 1 cooper: 1 stark: 1