我试图找到一个徒劳的答案,所以这里是:
目标是让一个字典有一些列表作为值,然后有一个函数(取决于用户输入)将采取其中一个列表并将其与其他列表组合,最后我应该得到最终列表打印。
看起来很简单,但我得到的是类型错误(列表不可用)。 combine2函数似乎与我试图提供它的任何其他两个列表完全正常,除了,当它试图获得一个字典值列表(??)时。有人知道我做错了什么吗?
dic = {
'reptiles': ['lizzard', 'crocodile', 'T-Rex'],
'birds': ['canary', 'parrot', 'seagul'],
'mammals': ['monkey', 'cat', 'dog'],
'insects': ['ant', 'bee', 'wasp']
}
FishList = ['goldfish', 'shark', 'trout']
def combine2 (a, b): # returns the combinations of 2 lists' items
tmp = []
n = 0
while n < len(a):
for i in b:
if 8 <= len(str(a[n])+str(i)) and 16 >= len(str(a[n])+str(i)):
tmp.append(str(a[n]) + str(i))
n += 1
return tmp
def animals_mix(k, l): # just some arbitrary combinations of lists
list1 = combine2(FishList, dic[k])
list2 = combine2(list1, dic[k])
list3 = combine2(dic[k], FishList)
l = dic[k] + list1 + list2 + list3
def animals():
print '''\n\nwhat's your favourite animal group?\n
1) reptiles
2) birds
3) mammals
4) insects
'''
while True:
x = raw_input("[+] pick a number > ")
tmp = []
if x == '1':
animals_mix(dic['reptiles'], tmp)
break
elif x == '2':
animals_mix(dic['birds'], tmp)
break
elif x == '3':
animals_mix(dic['mammals'], tmp)
break
elif x == '4':
animals_mix(dic['insects'], tmp)
break
elif x == '':
break
else:
print "\nError: That wasn't in the list of options\nType one of the numbers or press ENTER to move on\n"
return tmp
print animals()
答案 0 :(得分:1)
对于&#34; TypeError:不可用的类型:&#39; list&#39;&#34;,这是因为当你看似打算传递密钥然后访问该列表时,你实际上是在你的dict中传递列表:
animals_mix(dic['reptiles'], tmp)
...
def animals_mix(k, l):
list1 = combine2(FishList, dic[k])
在animals_mix()
的第一行,您实际上正在尝试dic[dic['reptiles']]
并且会can not be keyed by un-hashable types,因此错误。