Как мне подсчитать, сколько из каждого заголовка в словаре

#python #dictionary

#python #словарь

Вопрос:

Я уже некоторое время пытаюсь разобраться в этом, не самый лучший в программировании. Вот что у меня есть на данный момент.

Ключами словаря должны быть заголовки сотрудников в списке, а значениями — количество сотрудников с этим конкретным заголовком.

 employees = [
    {
        "email": "jonathan2532.calderon@gmail.com",
        "employee_id": 101,
        "firstname": "Jonathan",
        "lastname": "Calderon",
        "title": "Mr",
        "work_phone": "(02) 3691 5845"
    },
    {
        "email": "christopher8710.hansen@gmail.com",
        "employee_id": 102,
        "firstname": "Christopher",
        "lastname": "Hansen",
        "title": "Mr",
        "work_phone": "(02) 5807 8580"
    },
    {
        "email": "isabella4643.dorsey@gmail.com",
        "employee_id": 103,
        "firstname": "Isabella",
        "lastname": "Dorsey",
        "title": "Mrs",
        "work_phone": "(02) 6375 1060"
    },
    {
        "email": "barbara1937.baker@gmail.com",
        "employee_id": 104,
        "firstname": "Barbara",
        "lastname": "Baker",
        "title": "Ms",
        "work_phone": "(03) 5729 4873"
    }
]




#my work
for i in employees:
    print(i['title'])

employees.count('title')
print()
  
 #my output:
Mr
Mr
Mrs
Ms
  
 #expected output:
{'Ms': 1, 'Mrs': 1, 'Mr': 2}
  

Комментарии:

1. collections.Counter

2. Где находится код, который выдает вам результат, который вы описываете? Поставьте на него счетчик!

3. спасибо тебе за это @meowgoesthedog

Ответ №1:

collections.Counter

 from collections import Counter

counts = Counter([x['title'] for x in employees])
print(counts)
# Counter({'Mr': 2, 'Mrs': 1, 'Ms': 1})
  

Если есть какие-либо записи, у которых нет title поля, используйте:

 counts = Counter([x.get("title", None) for x in employees])
# Counter({'Mr': 2, 'Mrs': 1, 'Ms': 1, None: 1})
  

Здесь .get будет получено значение для title или возвращено, None если title его там нет.

Ответ №2:

Используя collections.defaultdict

Пример:

 from collections import defaultdict

result = defaultdict(int)
for i in employees:
    result[i["title"]]  = 1
print(result)
  

Вывод:

 defaultdict(<type 'int'>, {'Mrs': 1, 'Ms': 1, 'Mr': 2})
  

Комментарии:

1. Также можно использовать, Counter если вы собираетесь импортировать из collections .

2. Очень полезно, в итоге я использовал счетчик 🙂

Ответ №3:

Вы можете сделать это с помощью счетчика:

 from collection import Counter
titles = [e['title'] for e in employees]
counts = Counter(titles)
# Counter({'Mr': 2, 'Mrs': 1, 'Ms': 1})