import re
from collections import Counter
words = re.findall('\w+', open('/Users/Jack/Desktop/testytext').read().lower())
listy = Counter(words).most_common()
theNewList = list(listy)
theNewList[1][1] = 10
#****ERROR HERE****
#Traceback (most recent call last):
# File "countTheWords.py", line 16, in <module>
# theNewList[1][1] = 10
#TypeError: 'tuple' object does not support item assignment
在我看来,list()调用应该将'listy'转换为列表。知道我做错了吗?
答案 0 :(得分:2)
listy
一个list
:
>>> type(listy)
<type 'list'>
其元素不是:
>>> type(listy[1])
<type 'tuple'>
你正在尝试修改其中一个元素:
>>> type(listy[1][1])
<type 'int'>
您可以像这样转换元素:
>>> listier = [list(e) for e in listy]
>>> type(listier)
<type 'list'>
>>> type(listier[1])
<type 'list'>
>>> type(listier[1][1])
<type 'int'>
然后分配:
>>> listier[1][1] = 10
>>> listier[1][1]
10
答案 1 :(得分:1)
.most_common()
返回元组列表。当你执行list(listy)
时,你实际上什么都没做。它不会将里面的元组更改为列表。
由于元组是不可变的,它们不会让你更改它中的项目(与可变的列表相比)。
但是,您可以使用map()
:
map(list, listy)
答案 2 :(得分:0)
theNewList[1]
是一个有效的列表项访问,它返回一个元组。因此theNewList[1][1] = 10
是尝试分配给元组项目。这是无效的,因为元组是不可变的。
为什么要分配新的计数?