Python &引用;类型错误:不可损坏的类型:';列表'&引用;然而我';我试图只对列表的值进行切片,而不使用列表本身

Python &引用;类型错误:不可损坏的类型:';列表'&引用;然而我';我试图只对列表的值进行切片,而不使用列表本身,python,list,dictionary,typeerror,Python,List,Dictionary,Typeerror,我在尝试使用列表中的值创建字典时遇到问题 alphabetList = list(string.ascii_lowercase) alphabetList.append(list(string.ascii_lowercase)) alphabetDict = {} def makeAlphabetDict (Dict, x): count = 0 while count <= len(alphabetList): item1 = x[(count + (le

我在尝试使用列表中的值创建字典时遇到问题

alphabetList = list(string.ascii_lowercase)
alphabetList.append(list(string.ascii_lowercase))
alphabetDict = {}
def makeAlphabetDict (Dict, x):
    count = 0
    while count <= len(alphabetList):
        item1 = x[(count + (len(alphabetList) / 2))]
        item2 = item1
        Dict[item1] = item2
        count += 1
makeAlphabetDict(alphabetDict , alphabetList)
您的列表包含一个嵌套列表:

现在,您有了一个带有
['a'、'b'、…、'z'、['a'、'b'、…、'z']]
的列表。是外部列表中的最后一个元素导致了您的问题

您通常会使用
list.extend()
添加其他元素:

alphabetList.extend(string.ascii_lowercase)
您在那里使用了两次
string.ascii_lowercase
;也许你想用
ascii_大写字母
来代替其中一个字符串?即使如此,您的代码始终对键和值使用相同的字符,因此这在这里并不重要

如果您试图将小写字母映射为大写字母,或者将小写字母映射为大写字母,只需使用and
dict()

其中
zip()
生成字符对,而
dict()
将这些对作为键值对。上面生成了一个将小写ASCII字符映射为大写字符的字典:

>>> import string
>>> dict(zip(string.ascii_lowercase, string.ascii_uppercase))
{'u': 'U', 'v': 'V', 'o': 'O', 'k': 'K', 'n': 'N', 'm': 'M', 't': 'T', 'l': 'L', 'h': 'H', 'e': 'E', 'p': 'P', 'i': 'I', 'b': 'B', 'x': 'X', 'q': 'Q', 'g': 'G', 'd': 'D', 'r': 'R', 'z': 'Z', 'c': 'C', 'w': 'W', 'a': 'A', 'y': 'Y', 'j': 'J', 'f': 'F', 's': 'S'}
您的列表包含一个嵌套列表:

现在,您有了一个带有
['a'、'b'、…、'z'、['a'、'b'、…、'z']]
的列表。是外部列表中的最后一个元素导致了您的问题

您通常会使用
list.extend()
添加其他元素:

alphabetList.extend(string.ascii_lowercase)
您在那里使用了两次
string.ascii_lowercase
;也许你想用
ascii_大写字母
来代替其中一个字符串?即使如此,您的代码始终对键和值使用相同的字符,因此这在这里并不重要

如果您试图将小写字母映射为大写字母,或者将小写字母映射为大写字母,只需使用and
dict()

其中
zip()
生成字符对,而
dict()
将这些对作为键值对。上面生成了一个将小写ASCII字符映射为大写字符的字典:

>>> import string
>>> dict(zip(string.ascii_lowercase, string.ascii_uppercase))
{'u': 'U', 'v': 'V', 'o': 'O', 'k': 'K', 'n': 'N', 'm': 'M', 't': 'T', 'l': 'L', 'h': 'H', 'e': 'E', 'p': 'P', 'i': 'I', 'b': 'B', 'x': 'X', 'q': 'Q', 'g': 'G', 'd': 'D', 'r': 'R', 'z': 'Z', 'c': 'C', 'w': 'W', 'a': 'A', 'y': 'Y', 'j': 'J', 'f': 'F', 's': 'S'}

正如Martijn Pieters所指出的,您对在其他列表中添加列表的list append有问题。为了简单起见,您可以通过以下任一方式添加两个列表:

alphabetList = list(string.ascii_lowercase)
alphabetList += list(string.ascii_lowercase)
# Adds two lists; same as that of alphabetList.extend(alphabetList)

alphabetList = list(string.ascii_lowercase) * 2
# Just for your use case to iterate twice over the alphabets

在这两种情况下,您的alphabetDict只有26个字母,而不是52个字母,因为您的dict中不能有重复的键。

正如Martijn Pieters所指出的,您在添加其他列表中的列表时遇到了问题。为了简单起见,您可以通过以下任一方式添加两个列表:

alphabetList = list(string.ascii_lowercase)
alphabetList += list(string.ascii_lowercase)
# Adds two lists; same as that of alphabetList.extend(alphabetList)

alphabetList = list(string.ascii_lowercase) * 2
# Just for your use case to iterate twice over the alphabets

在这两种情况下,您的alphabetDict只有26个字母,而不是52个,因为您的dict中不能有重复的键。

谢谢您的帮助。我正在尝试得到一个列表,它可以用小写字母重复两次,而不用花太多时间手工输入。list.extend允许我这样做吗?list.extend可以。但是,dict只会有一次。@ChrisHill:不确定您要做什么,因为您的函数会完全忽略该列表的前半部分,并将每个键设置两次(字典中的键是唯一的,因此您将在第二次替换该键)。您将得到与dict(zip(string.ascii\u lowercase,string.ascii\u lowercase))相同的结果,也就是说,字典将小写字符映射到完全相同的小写字母。这不是一个非常有用的映射。@ChrisHill:但是是的,
list.extend()
将把参数中的元素作为单独的元素添加到列表中。你的列表会增加那么多元素。@MartijnPieters好吧,我没意识到。我得检查一下。谢谢你提醒我,你可能帮我省去了很多挫折;)谢谢你的帮助。我正在尝试得到一个列表,它可以用小写字母重复两次,而不用花太多时间手工输入。list.extend允许我这样做吗?list.extend可以。但是,dict只会有一次。@ChrisHill:不确定您要做什么,因为您的函数会完全忽略该列表的前半部分,并将每个键设置两次(字典中的键是唯一的,因此您将在第二次替换该键)。您将得到与dict(zip(string.ascii\u lowercase,string.ascii\u lowercase))相同的结果,也就是说,字典将小写字符映射到完全相同的小写字母。这不是一个非常有用的映射。@ChrisHill:但是是的,
list.extend()
将把参数中的元素作为单独的元素添加到列表中。你的列表会增加那么多元素。@MartijnPieters好吧,我没意识到。我得检查一下。谢谢你提醒我,你可能帮我省去了很多挫折;)是的,我在发帖后不久就编辑了它。:)是的,我在发帖后不久就编辑了它。:)