我必须做什么才能将自定义类型的对象用作Python字典中的键(我不希望"对象id"充当键),例如
class MyThing:
def __init__(self,name,location,length):
self.name = name
self.location = location
self.length = length
Run Code Online (Sandbox Code Playgroud)
如果名称和位置相同,我想使用MyThing作为被认为相同的键.从C#/ Java我习惯于必须覆盖并提供equals和hashcode方法,并承诺不会改变hashcode所依赖的任何内容.
我必须在Python中做些什么才能实现这一目标?我应该吗?
(在一个简单的例子中,就像这里一样,或许最好只将(名称,位置)元组作为键 - 但考虑我希望键是一个对象)
问题:
BeautifulSoup为CSS选择器提供非常有限的支持.例如,唯一支持的伪类是nth-of-type,它只能接受数值 - 参数喜欢even或odd不允许.
是否可以扩展BeautifulSoupCSS选择器或让它在lxml.cssselect内部用作底层CSS选择机制?
我们来看一个示例问题/用例.在以下HTML中仅查找偶数行:
<table>
<tr>
<td>1</td>
<tr>
<td>2</td>
</tr>
<tr>
<td>3</td>
</tr>
<tr>
<td>4</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
在lxml.html和中lxml.cssselect,很容易做到:nth-of-type(even):
from lxml.html import fromstring
from lxml.cssselect import CSSSelector
tree = fromstring(data)
sel = CSSSelector('tr:nth-of-type(even)')
print [e.text_content().strip() for e in sel(tree)]
Run Code Online (Sandbox Code Playgroud)
但是,在BeautifulSoup:
print(soup.select("tr:nth-of-type(even)"))
Run Code Online (Sandbox Code Playgroud)
会抛出错误:
NotImplementedError:nth-of-type伪类目前仅支持数值.
请注意,我们可以解决此问题.find_all():
print([row.get_text(strip=True) for index, row in enumerate(soup.find_all("tr"), start=1) if …Run Code Online (Sandbox Code Playgroud)