Python集团计数

时间:2013-11-23 20:48:49

标签: python

鉴于字典,我需要一些方法来执行以下操作:

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

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

我研究的内容:

count = Counter(在input_file中为tok设置tok ['Name'])

这计算名称的出现次数(即Bob:2,Amy:4)。但是,我还需要在性别和职业上加上这一点(即Bob,M,Salesperson:2,Amy,F,Manager:1)。

1 个答案:

答案 0 :(得分: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. 创建一个新词典并仅添加满足约束条件的值。
  3. 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
    

    P.S。我选择了更简单的第二种方式。选择第一种方法会导致大量的计算开销,我们当然希望避免这种情况。