python中等于号可以用is代替_我可以改变在Python dict中比较键的方式吗?我想用运算符“is”代替==...

first_h1和second_h1是my_dict[first_h1]或my_dict[second_h1]时,标记的字符串表示形式用于哈希。问题是,这两个Tag实例具有相同的字符串表示形式:

some_header

这是因为Tag类具有__hash__()魔术方法的定义如下:

^{pr2}$

解决方法之一可能是使用^{}值作为散列值,但是存在重新定义Tag类的问题。你可以自己解决这个问题class TagWrapper:

def __init__(self, tag):

self.tag = tag

def __hash__(self):

return id(self.tag)

def __str__(self):

return str(self.tag)

def __repr__(self):

return str(self.tag)

然后,您将能够:In [1]: from bs4 import BeautifulSoup

...:

In [2]: class TagWrapper:

...: def __init__(self, tag):

...: self.tag = tag

...:

...: def __hash__(self):

...: return id(self.tag)

...:

...: def __str__(self):

...: return str(self.tag)

...:

...: def __repr__(self):

...: return str(self.tag)

...:

In [3]: HTML_string = "

some_header

some_header

"

...:

...: HTML_soup = BeautifulSoup(HTML_string, 'lxml')

...:

In [4]: first_h1 = HTML_soup.find_all('h1')[0] #first_h1 =

some_header

...: second_h1 = HTML_soup.find_all('h1')[1] #second_h1 =

some_header

...:

In [5]: my_dict = {}

...: my_dict[TagWrapper(first_h1)] = 1

...: my_dict[TagWrapper(second_h1)] = 1

...:

...: print(my_dict)

...:

{

some_header

: 1,

some_header

: 1}

不过,它并不漂亮,使用起来也不太方便。我会重申你最初的问题,并检查你是否真的需要把标签放入字典。在

您也可以使用Python的自省功能(如it was done here)来修补bs4,但这将进入一个相当危险的领域。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值