2015-03-17 6 views
-1

Я предполагаю, что есть лучший способ перепрограммировать dict в Python, но я не уверен, как это сделать. На данный момент у меня есть диктофон, и я пытаюсь найти лучший способ найти средний возраст владельцев автомобилей компании в компании. На данный момент я получаю правильный результат, но я думаю, что мой метод неэффективен, так как я буду искать каждый ключ NAME в фирменном диктофоне, проверьте для Company Car == на «Да», а затем отбросьте возраст сотрудника в список , Тогда я бы сделал средний расчет в списке в конце компании. Я уверен, что должен быть лучший метод, чем создание списков и снижение значений в нем?Непосредственно вычислять условные средние значения в словаре Python

Вот пример на моем Dict из dicts ...

Company{ 

'NAME1': {''M_or_F': 'Male', 
       'AGE’: '24', 
      ‘DEPT’: ‘Finance', 
     ‘Company Car’:’No’'} 

'NAME2': {''M_or_F': 'Male', 
       'AGE’: '52', 
      ‘DEPT’: ‘Marketing', 
     ‘Company Car’:’Yes’'} 

'NAME3': {''M_or_F': 'Female', 
       'AGE’: '36', 
      ‘DEPT’: ‘Finance', 
     ‘Company Car’:'Yes''} 

'NAME4': {''M_or_F': 'Male', 
       'AGE’: '28', 
      ‘DEPT’: ‘Finance', 
     ‘Company Car’:’No’'} 

'NAME5': {''M_or_F': 'Female', 
       'AGE’: '23', 
      ‘DEPT’: ‘HR', 
     ‘Company Car’:’Yes’'} 
} 

Любые намеки о том, как я могу избавиться от списков и вычислить непосредственно из словаря?

Мой текущий неэффективный метод ...

CC_agelist = [] 

for NAME in Company: 
    if (Company[NAME][‘Company Car'] == 'Yes'): 
     CC_agelist.append(int(Company[NAME]['AGE’])) 

#followed by an average calculation on CC_agelist 
+0

Пожалуйста, исправьте кавычки в своей программе. Это делает его нечитаемым. – thefourtheye

ответ

1

Во-первых, очистить синтаксис ваших данных следующим образом:

Company = { 

'NAME1': {'M_or_F': 'Male', 
      'AGE': '24', 
      'DEPT': 'Finance', 
    'Company Car': 'No'}, 

'NAME2': {'M_or_F': 'Male', 
      'AGE': '52', 
      'DEPT': 'Marketing', 
    'Company Car': 'Yes'}, 

'NAME3': {'M_or_F': 'Female', 
      'AGE': '36', 
      'DEPT': 'Finance', 
    'Company Car': 'Yes'}, 

'NAME4': {'M_or_F': 'Male', 
      'AGE': '28', 
      'DEPT': 'Finance', 
    'Company Car': 'No'}, 

'NAME5': {'M_or_F': 'Female', 
      'AGE': '23', 
      'DEPT': 'HR', 
    'Company Car': 'Yes'} 
} 

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

Или вы можете импортировать numpy и делать все на одной линии:

import numpy as np 
mean_CC_age = np.mean([int(D['AGE']) for D in Company.itervalues() if D['Company Car'] == 'Yes']) 
+0

Спасибо за помощь, это выглядит намного чище – MikG

Смежные вопросы