我使用一系列循环中的列表和字典动态创建变量。这允许我根据条件为这些字典分配不同的值。为了简化演示,我删除了循环并硬编码了一些值,如下所示:
import requests
url = 'http://www.whoscored.com/StatisticsFeed/1/GetTeamStatistics'
params = {
'category': 'tackles',
'subcategory': 'success',
'statsAccumulationType': '0',
'field': 'Overall',
'tournamentOptions': '',
'timeOfTheGameStart': '0',
'timeOfTheGameEnd': '5',
'teamIds': '',
'stageId': '9155',
'sortBy': 'Rating',
'sortAscending': '',
'page': '1',
'numberOfTeamsToPick': '',
'isCurrent': 'true',
'formation': ''
}
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
'Host': 'www.whoscored.com',
'Referer': 'http://www.whoscored.com/'}
responser = requests.get(url, params=params, headers=headers)
responser = responser.json()
teamStatDicts = responser[u'teamTableStats']
for statDict in teamStatDicts:
mykey2 = ['tackles','success','0','Overall','0','5','9155','Rating','1','true']
mykey3 = {}
mykey3[mykey2] = ("{challengeLost},{tackleWonTotal},{tackleTotalAttempted},".decode('cp1252').format(**statDict))
当我运行此代码时,我收到以下错误:
mykey3[mykey2] = ("{challengeLost},{tackleWonTotal},{tackleTotalAttempted},".decode('cp1252').format(**statDict))
TypeError: unhashable type: 'list'
有谁能告诉我这个错误的原因是什么以及我可以做些什么来纠正它?
由于
答案 0 :(得分:4)
您不能将列表用作字典中的键,因为它可以被修改,并考虑字典会发生什么情况!
相反,只需将其设为元组:
mykey2 = ('tackles','success','0','Overall','0','5','9155','Rating','1','true')
参考:参见" hashable"的定义here
答案 1 :(得分:1)
我无法提出原始答案,但这里有一些来自python wiki
的内容Python的新手经常想知道为什么,虽然该语言同时包含元组和列表类型,但元组可用作字典键,而列表则不可用。
因此,如果您可以将 mykey2 更改为这样的元组。您可以将它用作字典键。
mykey2 = ('tackles','success','0','Overall','0','5','9155','Rating','1','true')
还要谢谢。我不知道python可以做到这一点。 :)我向你学习!