python2.7:TypeError:不可用类型:' list'

时间:2017-02-04 16:10:11

标签: python-2.7 list dictionary typeerror

我试图找到一个徒劳的答案,所以这里是:

目标是让一个字典有一些列表作为值,然后有一个函数(取决于用户输入)将采取其中一个列表并将其与其他列表组合,最后我应该得到最终列表打印。

看起来很简单,但我得到的是类型错误(列表不可用)。 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()

1 个答案:

答案 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,因此错误。