相关疑难解决方法(0)

自定义类型的对象作为字典键

我必须做什么才能将自定义类型的对象用作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中做些什么才能实现这一目标?我应该吗?

(在一个简单的例子中,就像这里一样,或许最好只将(名称,位置)元组作为键 - 但考虑我希望键是一个对象)

python dictionary

179
推荐指数
4
解决办法
9万
查看次数

在BeautifulSoup中扩展CSS选择器

问题:

BeautifulSoupCSS选择器提供非常有限的支持.例如,唯一支持的伪类是nth-of-type,它只能接受数值 - 参数喜欢evenodd不允许.

是否可以扩展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)

python beautifulsoup css-selectors html-parsing lxml.html

17
推荐指数
1
解决办法
1701
查看次数