按键错误 运行 Python 脚本(使用 Atom)
Key Error Running Python Script (Using Atom)
我以前从未使用过python。我正在按照 short guide on how to use an API with Python. I'm using Atom text editor plus the Hydrogen module 到 运行 所说的代码。
当我 运行 以下段时,我收到 KeyError: '203'。
champ_dict = {}
for key in static_champ_list['data']:
row = static_champ_list['data'][key]
champ_dict[row['key']] = row['id']
for row in participants:
print(str(row['champion']) + ' ' + champ_dict[str(row['champion'])])
row['championName'] = champ_dict[str(row['champion'])]
# print dataframe
df = pd.DataFrame(participants)
df
错误发生在下一行
print(str(row['champion']) + ' ' + champ_dict[str(row['champion'])])
我知道这是查找错误,但我不知道如何解决它。
这是我的代码的完整版本
#Test Script for interacting with
#RIOT API
#Built from 'Towards Data Science' guide
#If you want to use Hydrogen, install
#the Hydrogen Package and run
# python3 -m pip install ipykernel
# python3 -m ipykernel install --user
#This might allow pandas, idk
#-------------------------------------------
#Get installed module for Python
import riotwatcher
#Import tools.
from riotwatcher import LolWatcher, ApiError
#Import pandas
import pandas as pd
# Global variables
# Get new API from
# https://developer.riotgames.com/
api_key = 'RGAPI-XXXX-XXXX-XXXX-XXXX-XXXXXXXXXX'
watcher = LolWatcher(api_key)
my_region = 'euw1'
#Use 'watcher' to get basic stats
me = watcher.summoner.by_name(my_region, 'RGE lnspired')
print(me)
#Use 'watcher' to get ranked ranked stats
my_ranked_stats = watcher.league.by_summoner(my_region, me['id'])
print(my_ranked_stats)
# Setup retrieval of match info
my_matches = watcher.match.matchlist_by_account(my_region, me['accountId'])
# Fetch info about last match
last_match = my_matches['matches'][0]
match_detail = watcher.match.by_id(my_region, last_match['gameId'])
#Setup Data Frame to view some of this stuff
participants = []
for row in match_detail['participants']:
participants_row = {}
participants_row['champion'] = row['championId']
participants_row['spell1'] = row['spell1Id']
participants_row['spell2'] = row['spell2Id']
participants_row['win'] = row['stats']['win']
participants_row['kills'] = row['stats']['kills']
participants_row['deaths'] = row['stats']['deaths']
participants_row['assists'] = row['stats']['assists']
participants_row['totalDamageDealt'] = row['stats']['totalDamageDealt']
participants_row['goldEarned'] = row['stats']['goldEarned']
participants_row['champLevel'] = row['stats']['champLevel']
participants_row['totalMinionsKilled'] = row['stats']['totalMinionsKilled']
participants_row['item0'] = row['stats']['item0']
participants_row['item1'] = row['stats']['item1']
participants.append(participants_row)
df = pd.DataFrame(participants)
df
#So now we can look at what is referred
#to as 'Static Data'
# check league's latest version
latest = watcher.data_dragon.versions_for_region(my_region)['n']['champion']
# Lets get some champions static information
static_champ_list = watcher.data_dragon.champions(latest, False, 'en_US')
# champ static list data to dict for looking up
champ_dict = {}
for key in static_champ_list['data']:
row = static_champ_list['data'][key]
champ_dict[row['key']] = row['id']
for row in participants:
print(str(row['champion']) + ' ' + champ_dict[str(row['champion'])])
row['championName'] = champ_dict[str(row['champion'])]
# print dataframe
df = pd.DataFrame(participants)
df
为了使用键从 python 中的标准字典中检索值,它必须是有效的,否则将引发 KeyError
。因此,您的代码试图将键 '203'
与字典 champ_dict
一起使用,但是 '203'
不是有效键(因此 KeyError
)。要查看字典中当前存在哪些键,您可以在 champ_dict
上调用 dict.keys
方法。例如
>>> champ_dict = {'key1': 'val1', 'key2': 'val2', 'key3': 'val3'}
>>> champ_dict.keys()
dict_keys(['key1', 'key2', 'key3'])
我以前从未使用过python。我正在按照 short guide on how to use an API with Python. I'm using Atom text editor plus the Hydrogen module 到 运行 所说的代码。
当我 运行 以下段时,我收到 KeyError: '203'。
champ_dict = {}
for key in static_champ_list['data']:
row = static_champ_list['data'][key]
champ_dict[row['key']] = row['id']
for row in participants:
print(str(row['champion']) + ' ' + champ_dict[str(row['champion'])])
row['championName'] = champ_dict[str(row['champion'])]
# print dataframe
df = pd.DataFrame(participants)
df
错误发生在下一行
print(str(row['champion']) + ' ' + champ_dict[str(row['champion'])])
我知道这是查找错误,但我不知道如何解决它。
这是我的代码的完整版本
#Test Script for interacting with
#RIOT API
#Built from 'Towards Data Science' guide
#If you want to use Hydrogen, install
#the Hydrogen Package and run
# python3 -m pip install ipykernel
# python3 -m ipykernel install --user
#This might allow pandas, idk
#-------------------------------------------
#Get installed module for Python
import riotwatcher
#Import tools.
from riotwatcher import LolWatcher, ApiError
#Import pandas
import pandas as pd
# Global variables
# Get new API from
# https://developer.riotgames.com/
api_key = 'RGAPI-XXXX-XXXX-XXXX-XXXX-XXXXXXXXXX'
watcher = LolWatcher(api_key)
my_region = 'euw1'
#Use 'watcher' to get basic stats
me = watcher.summoner.by_name(my_region, 'RGE lnspired')
print(me)
#Use 'watcher' to get ranked ranked stats
my_ranked_stats = watcher.league.by_summoner(my_region, me['id'])
print(my_ranked_stats)
# Setup retrieval of match info
my_matches = watcher.match.matchlist_by_account(my_region, me['accountId'])
# Fetch info about last match
last_match = my_matches['matches'][0]
match_detail = watcher.match.by_id(my_region, last_match['gameId'])
#Setup Data Frame to view some of this stuff
participants = []
for row in match_detail['participants']:
participants_row = {}
participants_row['champion'] = row['championId']
participants_row['spell1'] = row['spell1Id']
participants_row['spell2'] = row['spell2Id']
participants_row['win'] = row['stats']['win']
participants_row['kills'] = row['stats']['kills']
participants_row['deaths'] = row['stats']['deaths']
participants_row['assists'] = row['stats']['assists']
participants_row['totalDamageDealt'] = row['stats']['totalDamageDealt']
participants_row['goldEarned'] = row['stats']['goldEarned']
participants_row['champLevel'] = row['stats']['champLevel']
participants_row['totalMinionsKilled'] = row['stats']['totalMinionsKilled']
participants_row['item0'] = row['stats']['item0']
participants_row['item1'] = row['stats']['item1']
participants.append(participants_row)
df = pd.DataFrame(participants)
df
#So now we can look at what is referred
#to as 'Static Data'
# check league's latest version
latest = watcher.data_dragon.versions_for_region(my_region)['n']['champion']
# Lets get some champions static information
static_champ_list = watcher.data_dragon.champions(latest, False, 'en_US')
# champ static list data to dict for looking up
champ_dict = {}
for key in static_champ_list['data']:
row = static_champ_list['data'][key]
champ_dict[row['key']] = row['id']
for row in participants:
print(str(row['champion']) + ' ' + champ_dict[str(row['champion'])])
row['championName'] = champ_dict[str(row['champion'])]
# print dataframe
df = pd.DataFrame(participants)
df
为了使用键从 python 中的标准字典中检索值,它必须是有效的,否则将引发 KeyError
。因此,您的代码试图将键 '203'
与字典 champ_dict
一起使用,但是 '203'
不是有效键(因此 KeyError
)。要查看字典中当前存在哪些键,您可以在 champ_dict
上调用 dict.keys
方法。例如
>>> champ_dict = {'key1': 'val1', 'key2': 'val2', 'key3': 'val3'}
>>> champ_dict.keys()
dict_keys(['key1', 'key2', 'key3'])