2013-11-23 160 views
0

鉴于字典,我需要一些方法来做到以下几点:Python Group by count

在字典中,我们有姓名,性别,职业和薪水。我需要弄清楚,如果我在搜索字词中搜索的每个姓名,都不会超过5名具有相同姓名,性别和职业的其他员工。如果是这样,我输出它。否则,我将其删除。

任何帮助或资源,将不胜感激!

我研究什么:

数=计数器(TOK [ '名称']在INPUT_FILE TOK)

这计数occurances的名称数量(即鲍勃:2,艾米:4)。但是,我需要为此添加性别和职业(即Bob,M,销售员:2,Amy,F,经理:1)。

+0

什么是{'key':'value'}对。你如何将数据存储在'dict'中? 如果您仍然试图解决这个问题,为什么不尝试一个“面向对象的设计”? – tMJ

+0

http://stackoverflow.com/questions/20150561/class-or-object-instead-of-dictionaries-in-python-2/20151058#20151058 – tMJ

+0

有点取决于你的'dict'的样子。显示一个例子。 – roippi

回答

1

要仅检查字典是否有5个或更多(key,value)对,其中雇员的姓名,性别和职业相同,这非常简单。消除所有这些不一致是棘手的。

# data = {} 
# key = 'UID' 
# value = ('Name','Male','Accountant','20000') 
# data[key] = value 

def consistency(dictionary): 

    temp_list_of_values_we_care_about = [(x[0],x[1],x[2]) for x in dictionary.itervalues()] 
    temp_dict = {} 

    for val in temp_list_of_values_we_care_about: 
     if val in temp_dict: 
      temp_dict[val] += 1 
     else: 
      temp_dict[val] = 1 

    if max(temp_dict.values()) >=5: 
     return False 
    else: 
     return True 

而实际上,得到去掉那些特定值的字典,有两种方法。

  1. 编辑并更新原始字典。 (在原地做)
  2. 创建一个新字典,并只添加那些满足我们约束的值。
def consistency(dictionary): 

    temp_list_of_values_we_care_about = [(x[0],x[1],x[2]) for x in dictionary.itervalues()] 
    temp_dict = {} 

    for val in temp_list_of_values_we_care_about: 
     if val in temp_dict: 
      temp_dict[val] += 1 
     else: 
      temp_dict[val] = 1 

    new_dictionary = {} 
    for key in dictionary: 

     value = dictionary[key] 
     temp = (value[0],value[1],value[2]) 

     if temp_dict[temp] <=5: 
      new_dictionary[key] = value 

    return new_dictionary 

附:我选择了更容易做到的第二种方式。选择第一种方法会导致很多计算开销,我们当然希望避免这种情况。

+0

移除选项对我来说并不重要(奖金功能),但谢谢! – Nitrodbz

+0

添加了删除选项。 – tMJ

+0

@Nitrodbz如果你觉得答案是完整的,你可以接受它。 – tMJ