Подсчет значений в базе данных словаря сотрудников в python - PullRequest
0 голосов
/ 01 июня 2018

python - новый язык для меня, поэтому этот вопрос может показаться простым, но если кто-то может указать мне правильное направление, я был бы признателен за это!Я создал словарь по вызову сотрудников, и он имеет некоторую ценность:

Я пытаюсь прочитать, сколько человек в каждом отделе, например: tech-2, accounting-1.

У меня есть что-то подобное, но оно печатается пустым.

  def main():
   employees= {'name': 'John', 'empID': '102', 'dpt': 'tech', 'title': 
   'programmer', 'salary': '75'}
   {'name': 'Jane', 'empID': '202', 'dpt': 'tech', 'title': 'programmer', 
   'salary': '80'}
   {'name': 'Joe', 'empID': '303', 'dpt': 'accounting', 'title': 
   'accountant', 'salary': '85'}
    for item in employees:
    dic = employees[item]
    if dic['dpt'[0]]==dic['dpt'[1]]:
        duplicate += 1
        print("there are "+ duplicate)
    else:
        print("There are no duplicate")

Ответы [ 4 ]

0 голосов
/ 01 июня 2018

Если вы ищете сумму по одному конкретному ключу, вы можете использовать .count() метод списка в качестве прямого запроса.

С учетом списка диктов:

>>> employees = [{'name': 'John', 'empID': '102', 'dpt': 'tech', 'title': 'programmer', 'salary': '75'},
         {'name': 'Jane', 'empID': '202', 'dpt': 'tech', 'title': 'programmer', 'salary': '80'},
         {'name': 'Joe', 'empID': '303', 'dpt': 'accounting', 'title': 'accountant', 'salary': '85'}]

Вы можете создать список каждого с пониманием списка:

>>> [d['dpt'] for d in employees]
['tech', 'tech', 'accounting']

И затем можно подсчитать:

>>> [d['dpt'] for d in employees].count('tech')
2
>>> [d['dpt'] for d in employees].count('accounting')
1
>>> [d['dpt'] for d in employees].count('nothing')
0

В качестве альтернативы, вы можете создать генератор, который будетконкретные значения:

>>> sum(1 for d in employees if d['dpt']=='tech')
2

Если вы хотите иметь счетчик всех элементов (кроме использования счетчика), вы можете сделать:

>>> lot=[d['dpt'] for d in employees]
>>> {c:lot.count(c) for c in set(lot)}
{'accounting': 1, 'tech': 2}
0 голосов
/ 01 июня 2018

Использование collections.Counter:

from collections import Counter

employees = [{'name': 'John', 'empID': '102', 'dpt': 'tech', 'title': 'programmer', 'salary': '75'},
             {'name': 'Jane', 'empID': '202', 'dpt': 'tech', 'title': 'programmer', 'salary': '80'},
             {'name': 'Joe', 'empID': '303', 'dpt': 'accounting', 'title': 'accountant', 'salary': '85'}]

dpts = [x['dpt'] for x in employees]
print(Counter(dpts))

# Counter({'tech': 2, 'accounting': 1})
0 голосов
/ 01 июня 2018

Попробуйте это:

def main():
    duplicate = 0
    employees = [
        {'name': 'John', 'empID': '102', 'dpt': 'tech', 'title': 'programmer', 'salary': '75'},
        {'name': 'Jane', 'empID': '202', 'dpt': 'tech', 'title': 'programmer', 'salary': '80'},
        {'name': 'Joe', 'empID': '303', 'dpt': 'accounting', 'title': 'accountant', 'salary': '85'}
    ]
    tech_dep = 0
    accounting_dep = 0
    for item in employees:
        if item['dpt'] == 'tech':
            tech_dep += 1
        elif item['dpt'] == 'accounting':
            accounting_dep += 1

    print('Number of Employees from tech dep are : ', tech_dep)
    print('Number of Employees from accounting dep are : ', accounting_dep)


main()

Это даст вам такой вывод:

Number of Employees from tech dep are :  2
Number of Employees from accounting dep are :  1

Примечание:

Это простой ответ на ваш вопрос, потому что, как вы сказали, вы новичок в Python, поэтому я просто подумал дать вам простой ответ!Также обратите внимание, что способ создания словаря в вашем вопросе неправильный, вы можете сделать словарь словаря или список словарей.Более того, ответ, который @Austin только что дал вам, также прост и показывает использование счетчика.

Надеюсь, это поможет вам!:)

0 голосов
/ 01 июня 2018

Если вы не хотите импортировать Counter, используйте словарь для отслеживания количества сотрудников по отделам:

employee_list = [{
    'name': 'John',
    'empID': '102',
    'dpt': 'tech',
    'title': 'programmer',
    'salary': '75'
}, {
    'name': 'Jane',
    'empID': '202',
    'dpt': 'tech',
    'title': 'programmer',
    'salary': '80'
}, {
    'name': 'Joe',
    'empID': '303',
    'dpt': 'accounting',
    'title': 'accountant',
    'salary': '85'
}]

department_to_count = dict()
for employee in employee_list:
    department = employee["dpt"]

    if department not in department_to_count:
        department_to_count[department] = 0

    department_to_count[department] += 1

for department, employee_count in department_to_count.items():
    print("Department {} has {} employees".format(department,
                                                  employee_count))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...