获取类型错误:不可损坏类型:';列表';在python中
我有一本python字典:获取类型错误:不可损坏类型:';列表';在python中,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,我有一本python字典: aDict = { 'form-1-device': ['2'], 'form-0-test_group': ['1'], 'form-1-test_scenario': ['3'], } 我需要从dict中删除form-1-device和device等。到目前为止,我已经尝试过: for k,v in bDict.iteritems(): newk = [k[k.find('-',5)+1:]] print newk
aDict = {
'form-1-device': ['2'],
'form-0-test_group': ['1'],
'form-1-test_scenario': ['3'],
}
我需要从dict中删除form-1-device
和device
等。到目前为止,我已经尝试过:
for k,v in bDict.iteritems():
newk = [k[k.find('-',5)+1:]]
print newk
aDict[newk] = aDict[k]
del aDict[k]
或者代替
aDict[newk] = aDict[k]
del aDict[k]
这也能起作用
aDict[newk] = aDict.pop(k)
我的预期产出是:
aDict = {
'device': ['2'],
'test_group': ['1'],
'test_scenario': ['3'],
}
但它给出了一个错误TypeError:unhabable类型:python dict中的“list”
到目前为止,我一直在看
也看了一下这个
但对我来说什么都不管用。任何帮助都将不胜感激。问题出在这一行
newk = [k[k.find('-',5)+1:]]
newk
是一个列表,而不是字符串。去掉方括号,你的代码就可以工作了
有一个很好的解释,为什么列表不能用作字典键-
另外,我建议您使用字典理解创建一个新字典,并将aDict
name绑定到它
aDict = {
'form-1-device': ['2'],
'form-0-test_group': ['1'],
'form-1-test_scenario': ['3'],
}
aDict = {k[k.find('-',5)+1:]:v for k, v in aDict.iteritems()}
您将新钥匙装在此处:
newk = [k[k.find('-',5)+1:]]
它产生['device']
。这是一个列表(不能用作字典键,因为它不可散列)…您需要去掉外括号:
newk = k[k.find('-',5)+1:]
创建一个新的密钥时,您简直把事情搞砸了——dict被实现为哈希映射,并且需要哈希对象作为它们的密钥。很明显,您正在传递单元素列表(在
newk
variable周围的方括号)
这样行吗
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
分配中删除方括号,并使用items
而不是iteritems
for k,v in bDict.items():
newk = k[k.find('-',5)+1:]
print newk
aDict[newk] = aDict[k]
del aDict[k]
这是因为字典键是可散列的对象,而您正试图将一个不可散列的对象(列表)分配给您的键。因此,与之相反的是,我们非常感谢您的帮助,而不是
newk=[k[k.find('-',5)+1:][/code>donewk=k[k.find('-',5)+1:][/code>。很好,很好。谢谢你的回答。不言自明+1.)