小编Fra*_*las的帖子

在Python中,如何知道对象是否可以进行比较?

通过抽象基类,Python 提供了一种无需实际尝试即可了解对象行为的方法。在标准库中,我们为collections.abc 中的容器定义了一些 ABC 。例如,可以测试一个参数是否可迭代:

from collections.abc import Iterable
def function(argument):
    if not isinstance(argument, Iterable):
        raise TypeError('argument must be iterable.')
    # do stuff with the argument
Run Code Online (Sandbox Code Playgroud)

我希望有一个这样的 ABC 来决定是否可以比较一个类的实例但找不到一个。测试__lt__方法的存在是不够的。例如,字典不能比较,但__lt__仍然是定义的(与object实际相同)。

>>> d1, d2 = {}, {}
>>> d1 < d2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: dict() < dict()
>>> hasattr(d1, '__lt__')
True
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:有没有一种简单的方法来做到这一点,而无需自己进行比较并捕捉到 TypeError?

我的用例类似于排序的容器:我想在插入第一个元素时引发异常,而不是等待第二个元素。我想过将元素与其自身进行比较,但有没有更好的方法:

def insert(self, element):
    try:
        element < …
Run Code Online (Sandbox Code Playgroud)

python comparison-operators abstract-base-class python-3.x

4
推荐指数
1
解决办法
1323
查看次数

将字典保存为包含我可以不断添加的列的文件

我有货币的字典这里JSON.

为简单起见,我将提供一个示例:

{
    "AED": "united Arab Emirates Dirham",
    "AFN": "Afghan Afghani",
    ...
    "ZWL": "Zimbabwean Dollar"
}
Run Code Online (Sandbox Code Playgroud)

我希望将它们添加到一个文件中,我可以在不同的时间不断添加不同的货币组.该文件应具有货币代码名称的列(例如"AED")和名称的另一列.

我真的不知道从哪里开始.将非常感谢帮助指出我正确的方向.

我的字典代码如下:

import json
import urllib.request
def _fetch_currencies():
    f = urllib.request.urlopen(
        'http://openexchangerates.org/api/currencies.json')
    charset = f.info().get_param('charset', 'utf8')
    data = f.read()
    decoded = json.loads(data.decode(charset))
    print(json.dumps(decoded, indent=4))
Run Code Online (Sandbox Code Playgroud)

python dictionary currency file

2
推荐指数
1
解决办法
147
查看次数