获取类型错误:python di中的不可损坏类型:“list”

2024-09-22 16:33:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本python词典:

aDict = {
    'form-1-device': ['2'],
    'form-0-test_group': ['1'],
    'form-1-test_scenario': ['3'],
}

我需要从dict中删除form-1-device和{}等等。到目前为止,我已经试过了:

^{pr2}$

或者代替

 aDict[newk] = aDict[k]
 del aDict[k]

这也能起到作用

aDict[newk] = aDict.pop(k)

我的预期产出是:

aDict = {
    'device': ['2'],
    'test_group': ['1'],
    'test_scenario': ['3'],
}

但是它给出了一个错误TypeError: unhashable type: 'list' in python dict 到目前为止,我查看了Python dictionary : TypeError: unhashable type: 'list'和{a2} 我也看过这个Python creating dictionary key from a list of items 但对我来说什么都不管用。任何帮助都将不胜感激。在


Tags: testformdictionarydevicetypegroupdictlist
3条回答

创建一个新的key-dicts被实现为hash映射,并且需要hashable对象作为它们的键。显然传递的是单元素列表(变量newk前后的方括号)。在

这个行吗?在

d = {
    'form-1-device': ['2'],
    'form-0-test_group': ['1'],
    'form-1-test_scenario': ['3'],
    }

for k,v in d.iteritems():
    new_key = k.split('-')[2]
    d[new_key] = d.pop(k)

expected = {
    'device': ['2'],
    'test_group': ['1'],
    'test_scenario': ['3'],
    }

assert d == expected

问题出在这一行

newk = [k[k.find('-',5)+1:]] 

newk是一个列表,不是字符串。去掉方括号,你的代码就可以工作了。在

有一个很好的解释为什么列表不能用作字典键-https://wiki.python.org/moin/DictionaryKeys

另外,我建议您使用字典理解来创建一个新字典并将aDict名称绑定到它。在

^{pr2}$

你把新钥匙装在这里:

newk = [k[k.find('-',5)+1:]] 

产生['device']。这是一个列表(不能用作字典键,因为它不可散列)…你需要去掉外括号:

^{pr2}$

相关问题 更多 >