2013-11-23 208 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