2017-10-30 22 views
-1

私は、部門タイトルをキーとする辞書と、その部門内の従業員だけを対応する値として持つ辞書のリストを出力しようとしています。私は近いですが、この関数を実行すると、dep_dictはすべての部署の従業員を各キーに結び付けます。これはやっているものです:ループを持つPython辞書

{ 
department1: [{employee A info}, {employee B info}], 
department2: [{employee A info}, {employee B info}] 
} 

#Function for adding employees to dictionary by department 
def dep_emp(): 
    for x in dep_tup: 
     for names in employees: 
      if x == employees[names]["em_department"]: 
       dep_list.append(employees[names]) 
       dep_dict[x] = dep_list 
       continue 

をしかし、(2つの部門がある場合)の代わりに、それは次のようになり、従業員Aは、Bがdepartment2のために働くdepartment1と従業員のために働くと仮定すると:

{ 
department1: [{employee A info}], 
department2: [{employee B info}] 
} 

注: dep_tupはユーザーが入力した部門名のタプルで、employeesはすべての従業員とその情報(キー=従業員名)からなる辞書です。

+0

department1に3人の従業員がいる場合はどうなりますか? – wwii

+2

'dep_tup'と' employees'の最小限の例を示してください。 - [mcve] – wwii

答えて

2

name in employeesごとに避けることができます。あなたが再定義/各部門のdep_listをリセットする必要が

def dep_emp(): 
    for x in dep_tup: 
     dep_list = [] # define list here 
     for names in employees: 
      if x == employees[names]["em_department"]: 
       dep_list.append(employees[names]) 

     if dep_list: 
      dep_dict[x] = dep_list 
+0

あなたが編集する前にそれは逆の働きをしました!ありがとう! – Tarzan

+0

それは私の喜びです!それは今も確かに機能します。 –

1

あなたのデータ構造、dep_listは、単にあなたの従業員のリスト内のすべての従業員を取得しています。

dep_dict[x] = dep_list 

本質的にすべての「x」をdep_listへの参照にマッピングしています。これは何に関係なく同じです。あなたが代わりにやりたいことは、それぞれのdep_dict [x]に格納された独立したリストに従業員[名前]を追加することです。キーがdep_dictにまだ格納されていない場合はリストを初期化するか、すでに存在する場合はemployees [名前]を連結してリストを初期化します。

def dep_emp(): 
    for x in dep_tup: 
     for names in employees: 
      if x == employees[names]["em_department"]: 
       dep_dict[x] = dep_dict.get(x, []) + employees[names] 
       continue 
関連する問題