我猜测有一种更好的方法来解决Python中的dict,但我不确定如何去做。目前我有一个词典,我正试图找到一个更好的方法来找出公司车主的平均年龄。目前我得到了正确的结果,但我认为我的方法效率低下,因为我会在公司字典中搜索每个NAME密钥,检查公司汽车==为“是”,然后将员工的年龄放入列表中然后,我会在公司结尾处对列表进行平均计算。我确信必须有一个比创建列表和删除值更好的方法吗?
这是关于我的词典的一个例子......
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 :(得分: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'}
}
现在您可以使用列表推导来获取列表,然后使用简单的公式来计算平均值:
CC_agelist = [int(D['AGE']) for D in Company.itervalues() if D['Company Car'] == 'Yes']
mean_CC_age = float(sum(CC_agelist)) / len(CC_agelist)
或者您可以导入numpy并在一行上执行所有操作:
import numpy as np
mean_CC_age = np.mean([int(D['AGE']) for D in Company.itervalues() if D['Company Car'] == 'Yes'])