오늘은 최근 전적 중에 2판 이상 같이 팀으로 플레이 했던 소환사를 찾고 해당 소환사와의 게임에서 승률을 계산해서 테이블 위젯으로 보여주는 것을 구현했다.
def who_played_with(self):
self.play_with = {}
for i in self.match_info_dict:
for v in self.game_detail_data[i]:
if (self.game_detail_data[i][v]['match_result'] == self.game_detail_data[i][self.summoner_info['name']]['match_result']) and (v != self.summoner_info['name']):
if v in self.play_with:
self.play_with[v]['count'] += 1
else:
self.play_with[v] = {}
self.play_with[v]['count'] = 1
self.play_with[v]['win'] = 0
if self.game_detail_data[i][v]['match_result']:
self.play_with[v]['win'] += 1
일단 닉네임을 key 값으로 하고 나올 때마다 count를 증가 시키고, 승리한 판수는 win의 값을 증가시키도록 해서 하나의 딕셔너리를 완성시킨다.
결과적으로 {닉네임 : {'count': , 'win': }} 이런 식으로 완성이 된다.
def display_win_rate_teammate(self):
column_headers = ['닉네임', '총 판수', '이긴 판수', '승률']
player_count = 0
player_name_list = []
for k, v in self.l.play_with.items():
if v['count'] >= 2:
player_count += 1
player_name_list.append(k)
self.win_rate_table.setRowCount(player_count)
self.win_rate_table.setColumnCount(len(column_headers))
self.win_rate_table.setHorizontalHeaderLabels(column_headers)
temp_list = [0 for i in range(len(column_headers))]
row = 0
for i in player_name_list:
temp_list[0] = i
temp_list[1] = self.l.play_with[i]['count']
temp_list[2] = self.l.play_with[i]['win']
temp_list[3] = round(self.l.play_with[i]['win'] / self.l.play_with[i]['count'] * 100, 2)
for k, v in enumerate(temp_list):
# float형도 그냥 쓸 수 있도록 하는 부분임
item = QTableWidgetItem(v)
item.setData(Qt.DisplayRole, v)
self.win_rate_table.setItem(row, k, item)
row += 1
self.win_rate_table.sortItems(1, order = Qt.DescendingOrder)
self.win_rate_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.win_rate_table.resizeRowsToContents()
같이 플레이한 판수가 2판이 넘는 소환사의 이름은 미리 추출해서 리스트 형태로 만들어두고 이 리스트를 이용해서 데이터를 추출하여 테이블 위젯에 추가하고 총 판수를 기준으로 정렬될 수 있도록 한다.