在python中向namedTuple实例添加新属性并转换为dict

2024-09-29 22:33:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试向一个命名元组添加一个新属性,我想在其中存储一些值。我想将其转换回JSON,以在api中作为参数传递。我找到了一个向namedTuple添加属性的答案,但是它创建了一个类型,并且不修改实例本身。实现上述功能的最佳方式是什么

how do I add fields to a namedtuple?

def _json_object_hook(d): 
    return namedtuple('X', d.keys())(*d.values())
def json2obj(data):
    return json.loads(data, object_hook=_json_object_hook)

def lambda_handler(event, context):
    registrationResponse = s3.get_object(Bucket=bucket, Key=registrationkey)
    registrationResponse = registrationResponse['Body'].read().decode('utf-8')
    registration = json2obj(registrationResponse)   
    abc = namedtuple('registration',registration._fields+('point',))
    y = abc._asdict()  # TypeError: _asdict() missing 1 required positional argument: 'self'

关于调试器

type(abc) #<class 'type'>
type(registration) #<class '__main__.X'>    
registration #<X, len() = 7>    
abc #<class '__main__.registration'>

Tags: jsonfieldsdatareturn属性objectdeftype
1条回答
网友
1楼 · 发布于 2024-09-29 22:33:41

namedtuple不创建命名的元组。它创建一个类,然后您应该实例化:

Record = namedtuple('Record', "a b")

如果你有类似dict的数据

d1 = dict(a=1, b=2)

您可以使用以下命令从中实例化类似的记录:

r1 = Record(**d1)

不要更改namedtuple字段,因为与元组一样,它们应该是不可变的

在可选的添加/更改dict key中,基于其key构建一个新的Record类,并实例化dict的namedtuple,以通过字段名进行访问

相关问题 更多 >

    热门问题