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 of
re.findall
)是不可散列的,不能用作dict键


但实际上,请阅读他人给出的建议,不要使用
re
解析HTML。BeautifulSoup是我的首选工具。

zip
返回元组列表,而不是元组

此外,一个元组只有在其每个元素都是可散列的情况下才是可散列的,所以一个列表元组也不会是可散列的

也就是说,
dict(zip(keys,values))
如果
keys
是一个可散列元素的列表,那么
datelist
包含的列表(results of
re.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}'))
在文件的每一行上?必须-