Skip to content

Instantly share code, notes, and snippets.

@kaoru-furuta
Created December 1, 2017 13:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kaoru-furuta/ff05eed81642e4827729b99264c7c0bf to your computer and use it in GitHub Desktop.
Save kaoru-furuta/ff05eed81642e4827729b99264c7c0bf to your computer and use it in GitHub Desktop.
# groupby をインポート
from itertools import groupby
# 辞書型で定義
TEAM_PRIZE = {
'山田チーム': 2500000,
'田中チーム': 400000,
'鈴木チーム': 3200000
}
# リスト型で定義
MEMBER_POINT = [
('山田チーム', '山田', 10),
('山田チーム', '吉田', 20),
('山田チーム', '武田', 30),
('田中チーム', '田中', 5),
('田中チーム', '田辺', 2),
('鈴木チーム', '鈴木', 80)
]
# 結果格納用
output_list = []
# groupby で回す
for key, group in groupby(sorted(MEMBER_POINT, key=lambda x: x[0]), key=lambda x: x[0]):
# グループ化されたデータをリストに変換しておく
group_list = list(group)
# チーム内の貢献ポイント合計を出す
team_point = sum(data[2] for data in group_list)
# グループ化されたデータを for で回し、欲しいデータを output_list に入れていく
for data in group_list:
team_name = data[0]
team_prize = TEAM_PRIZE[team_name]
member_name = data[1]
member_point = data[2]
member_percentage = round(member_point * 100 / team_point, 2)
member_prize = round(team_prize * member_percentage / 100)
output_list.append((team_name, team_prize, member_name,
member_point, member_percentage, member_prize))
# 出力確認
[print(data) for data in output_list]
# 出力結果
# ('山田チーム', 2500000, '山田', 10, 16.67, 416750)
# ('山田チーム', 2500000, '吉田', 20, 33.33, 833250)
# ('山田チーム', 2500000, '武田', 30, 50.0, 1250000)
# ('田中チーム', 400000, '田中', 5, 71.43, 285720)
# ('田中チーム', 400000, '田辺', 2, 28.57, 114280)
# ('鈴木チーム', 3200000, '鈴木', 80, 100.0, 3200000)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment