【问题标题】:TypeError: unhashable type: 'list' when dynamically creating 'variables'TypeError:不可散列的类型:动态创建“变量”时的“列表”
【发布时间】:2015-01-07 09:37:39
【问题描述】:

我在一系列循环中使用列表和字典动态创建变量。这允许我根据 if 条件为这些字典分配不同的值。为简单起见,我删除了循环并硬编码了一些值,如下所示:

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'

谁能告诉我这个错误的原因是什么以及我可以做些什么来纠正它?

谢谢

【问题讨论】:

    标签: python json list dictionary python-requests


    【解决方案1】:

    我想不出一个原始答案,但这里有一些来自python wiki的东西

    Python 的新手经常想知道为什么,虽然该语言同时包含元组和列表类型,但元组可用作字典键,而列表则不能。

    因此,如果您可以将 mykey2 更改为这样的元组。您可以将其用作字典键。 mykey2 = ('tackles','success','0','Overall','0','5','9155','Rating','1','true')

    也谢谢。我不知道python可以做到这一点。 :) 我向你学习!

    【讨论】:

      【解决方案2】:

      你不能使用列表作为字典中的键,因为它可以被修改,想想如果它是字典会发生什么!

      而只是把它变成一个元组:

      mykey2 = ('tackles','success','0','Overall','0','5','9155','Rating','1','true')
      

      参考:参见“hashable”的定义here

      【讨论】:

        猜你喜欢
        • 2022-01-01
        • 2018-12-26
        • 2020-03-28
        • 1970-01-01
        • 2016-03-16
        • 1970-01-01
        • 2012-10-27
        • 2019-01-29
        • 2012-02-19
        相关资源
        最近更新 更多