2017-08-25 552 views
1

我目前正在研究机器学习的安然数据集。但我被困在一个点,我需要找到NaN内部字典中特定键的值。 这是我的字典的样本看:计数字典字典中的值的数量

{"Name of person as a key":{"E-Mail":<email of person, if known>, "Salary":<salary off person, if known>}} 

在严格意义上讲,我想找到的人,他们的工资是不知道即NaN的数量。我应该如何继续?在此先感谢

+2

'sum(1 for d in data.values()if d ['Salary'] =='NaN')' – AChampion

+0

@AChampion这是一个非常棒的单线解决方案。感谢buddy – HrishikeshKulkarni

+1

@HrishikeshKulkarni我很感谢你的及时行动。只是想提一提,关键不是接受_my_答案,而是向用户表明[剽窃](https://stackoverflow.com/a/45874278/4909087)没有获得任何奖励。另外,使用新变量进行复制,但不改变核心答案并不会使问题变得可行,并且在您编辑时尝试做出功劳并不能解决问题。除非公平地使用其他评论或答案的转换,否则不宜使用。感谢和欢呼。 –

回答

1

假设d是含有相关值的字典的名称和np.nan经由字符串“的NaN”(它似乎给予我简短调查安然数据集)表示:

count = 0 
for person in d: 
    if d[person].get('Salary') == 'NaN': 
     count += 1 
+0

缺少':'和缩进。 – AChampion

1

你可以这样说:

for person in dic: 
     salary = dic.get(person).get('salary') 
     if not salary: 
      print person 

,你会得到其薪水是无的所有人员。

+0

是简单而优雅的方式。谢谢:) – HrishikeshKulkarni

0

你可以这样做: -

count = 0; 
for key, value in dict.items(): 
    if(value['Salary'] is None): 
      count+=1 

或者

for value in dict.values(): 
    if(value['Salary'] is None): 
      count+=1 

或在单次行: -

sum(1 for value in dict.values() if value['Salary'] is None) 

或者,如果需要做一些其他条件的额外你可以这样做: -

sum(1 if value['Salary'] is None else 0 for value in dict.values()) 

上面的行在[表达条件迭代]中解释它。

它给你额外的电源在计数一个更好的方法是: - 这个表达式返回工资的不可计数: -

['salary not available' if value['Salary'] is None else ''salary available'' for value in dict.values()].count('salary not available') 

而对于薪酬这个表达式返回数可供选择: -

['salary not available' if value['Salary'] is None else 'salary available' for value in dict.values()].count('salary available') 

我是新来的Python,我可以简单地说它是学习工作的绝佳语言,如自然英语的语言。