Python 类型错误:不可损坏的类型:';列表';从尝试创建dict开始
我在程序中收到以下错误:Python 类型错误:不可损坏的类型:';列表';从尝试创建dict开始,python,Python,我在程序中收到以下错误: 回溯(最近一次呼叫最后一次): 文件“bookmarks.py”,第26行,在 zipping=dict(zip(日期列表,匹配href)) TypeError:不可损坏的类型:“列表” 我想从两个列表(datelist和matchhref)创建字典,但不知何故,当我使用zip(),它会返回list,而不是tuple 这是我的密码: import re bm_raw = open('bookmarks.txt', 'r') bm_line = bm_raw.rea
回溯(最近一次呼叫最后一次):
文件“bookmarks.py”,第26行,在
zipping=dict(zip(日期列表,匹配href))
TypeError:不可损坏的类型:“列表”
我想从两个列表(datelist
和matchhref
)创建字典,但不知何故,当我使用zip()
,它会返回list
,而不是tuple
这是我的密码:
import re
bm_raw = open('bookmarks.txt', 'r')
bm_line = bm_raw.read()
matchhref = re.findall('(<DT><A HREF=".*?</A>)', bm_line)
massive = list()
datelist = list()
a = 0
for i in matchhref:
temp = matchhref[a]
found = re.findall('(\d\d\d\d\d\d\d\d\d\d)', temp)
datelist.append(found)
a=a+1
print datelist
print matchhref
zipping = dict(zip(datelist, matchhref))
重新导入
bm_raw=open('bookmarks.txt','r')
bm_line=bm_raw.read()
matchhref=re.findall('(
zip
返回元组列表,而不是元组
此外,一个元组只有在其每个元素都是可散列的情况下才是可散列的,所以一个列表元组也不会是可散列的
也就是说,dict(zip(keys,values))
如果keys
是一个可散列元素的列表,那么datelist
包含的列表(results ofre.findall
)是不可散列的,不能用作dict键
但实际上,请阅读他人给出的建议,不要使用
re
解析HTML。BeautifulSoup是我的首选工具。zip
返回元组列表,而不是元组
此外,一个元组只有在其每个元素都是可散列的情况下才是可散列的,所以一个列表元组也不会是可散列的
也就是说,dict(zip(keys,values))
如果keys
是一个可散列元素的列表,那么datelist
包含的列表(results ofre.findall
)是不可散列的,不能用作dict键
但实际上,请阅读其他人给出的建议,不要使用
re
解析HTML。BeautifulSoup是我的首选工具。正如我所评论的,您可以调用re.search,然后调用.group(),添加字符串,而不是findall返回的列表,这样您就可以使用字符串作为键,但这会让您的生活更加轻松:
In [50]:from bs4 import BeautifulSoup, Tag
In [51]: soup = BeautifulSoup(h,"xml")
In [52]: print(dict((dt["ADD_DATE"], dt["HREF"],) for dt in soup.select("DT A[HREF]")))
{u'1455024833': u'some random data', u'1460617925': u'some random data'}
select(“DT A[HREF]”
查找DT标记中具有HREF属性的所有锚定标记,即A
正则表达式的解决方案是:
found = re.search('(\d\d\d\d\d\d\d\d\d\d)', temp)
datelist.append(found.group())
但是请使用类似bs4或类似的html解析器。正如我所评论的,您可以调用re.search,然后调用.group(),添加字符串,而不是findall返回的列表,这样您就可以使用字符串作为键,但会使您的生活更轻松:
In [50]:from bs4 import BeautifulSoup, Tag
In [51]: soup = BeautifulSoup(h,"xml")
In [52]: print(dict((dt["ADD_DATE"], dt["HREF"],) for dt in soup.select("DT A[HREF]")))
{u'1455024833': u'some random data', u'1460617925': u'some random data'}
select(“DT A[HREF]”
查找DT标记中具有HREF属性的所有锚定标记,即A
正则表达式的解决方案是:
found = re.search('(\d\d\d\d\d\d\d\d\d\d)', temp)
datelist.append(found.group())
但是要使用像bs4或类似的html解析器。首先不要使用正则表达式来解析html,代码失败的原因是findall返回一个列表,您可以将它附加到列表中,然后尝试用作键,如果您想要一个元素,请使用
re.search
并调用.group
并附加它,为什么不只是findall('\d{10}'))
在文件的每一行上?必须-首先不要使用正则表达式解析html,代码失败的原因是findall返回一个列表,您可以将它附加到列表中,然后尝试用作键,如果您想要一个元素,请使用re.search
并调用.group
并附加,为什么不只是findall('\d{10}'))
在文件的每一行上?必须-