Created
December 1, 2017 13:10
-
-
Save kaoru-furuta/ff05eed81642e4827729b99264c7c0bf to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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