相关疑难解决方法(0)

在python中,如何将类对象转换为dict

假设我在python中有一个简单的类

class Wharrgarbl(object):
    def __init__(self, a, b, c, sum, version='old'):
        self.a = a
        self.b = b
        self.c = c
        self.sum = 6
        self.version = version

    def __int__(self):
        return self.sum + 9000

    def __what_goes_here__(self):
        return {'a': self.a, 'b': self.b, 'c': self.c}
Run Code Online (Sandbox Code Playgroud)

我可以很容易地将它转换为整数

>>> w = Wharrgarbl('one', 'two', 'three', 6)
>>> int(w)
9006
Run Code Online (Sandbox Code Playgroud)

哪个好极了!但是,现在我想以类似的方式把它变成一个字典

>>> w = Wharrgarbl('one', 'two', 'three', 6)
>>> dict(w)
{'a': 'one', 'c': 'three', 'b': 'two'}
Run Code Online (Sandbox Code Playgroud)

我需要为此定义什么?我试图取代这两个__dict__dict__what_goes_here__,但dict(w)导致了TypeError: Wharrgarbl object is …

python

65
推荐指数
5
解决办法
6万
查看次数

Pythonic将字典转换为namedtuple的方法,还是另一个Hashable dict-like?

我有一个字典,如:

d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
Run Code Online (Sandbox Code Playgroud)

我想将其转换为namedtuple.我目前的方法是使用以下代码

namedTupleConstructor = namedtuple('myNamedTuple', ' '.join(sorted(d.keys())))
nt= namedTupleConstructor(**d)
Run Code Online (Sandbox Code Playgroud)

哪个产生

myNamedTuple(a = 1,b = 2,c = 3,d = 4)

这对我来说很好(我认为),但我错过了内置如...

nt = namedtuple.from_dict() ?
Run Code Online (Sandbox Code Playgroud)

更新:正如评论中所讨论的那样,我想将我的字典转换为一个命名元组的原因是它变得可以清洗,但仍然像dict一样可用.

python dictionary namedtuple

39
推荐指数
4
解决办法
2万
查看次数

关于`namedtuple`的一些内容在3.5.1中有所改变吗?

在Python 3.5.0上:

>>> from collections import namedtuple
>>> cluster = namedtuple('Cluster', ['a', 'b'])
>>> c = cluster(a=4, b=9)
>>> c
Cluster(a=4, b=9)
>>> vars(c)
OrderedDict([('a', 4), ('b', 9)])
Run Code Online (Sandbox Code Playgroud)

在Python 3.5.1上:

>>> from collections import namedtuple
>>> cluster = namedtuple('Cluster', ['a', 'b'])
>>> c = cluster(a=4, b=9)
>>> c
Cluster(a=4, b=9)
>>> vars(c)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: vars() argument must have __dict__ attribute
Run Code Online (Sandbox Code Playgroud)

似乎有些事情发生了namedtuple变化(或者可能是某些事情vars()?).

这是故意的吗?我们不应该使用这种模式将命名元组转换为字典吗?

python typeerror namedtuple python-3.5

34
推荐指数
3
解决办法
3062
查看次数

将 NamedTuple 转换为 dict 以用于字典解包的 Pythonic 方法(**kwargs)

我有一个typing.NamedTuple我想转换为一个,dict以便我可以通过字典解包传递给一个函数:

def kwarg_func(**kwargs) -> None:
    print(kwargs)

# This doesn't actually work, I am looking for something like this
kwarg_func(**dict(my_named_tuple))
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最 Pythonic 方法是什么?我正在使用 Python 3.8+。


更多细节

这是一个NamedTuple可以使用的示例:

from typing import NamedTuple

class Foo(NamedTuple):
    f: float
    b: bool = True

foo = Foo(1.0)
Run Code Online (Sandbox Code Playgroud)

尝试kwarg_func(**dict(foo))提出一个TypeError

TypeError: cannot convert dictionary update sequence element #0 to a sequence
Run Code Online (Sandbox Code Playgroud)

根据这篇文章collections.namedtuple_asdict()作品:

TypeError: cannot convert dictionary update sequence element #0 to a sequence …
Run Code Online (Sandbox Code Playgroud)

python dictionary namedtuple iterable-unpacking

0
推荐指数
1
解决办法
40
查看次数