我有大约namedtuple个,我想对其成员应用一个函数,然后用相同名称的已处理元素创建一个新的namedtuple.

from collections imp或t namedtuple

def fun(val):
    if val is None:
        return "Unknown"
    return f"'{val}'"

我try 了到构造函数的基本映射,但我不知道namedtuple的元素或类型

processed_tuple = namedtuple(map(fun, some_tuple))

processed_tuple = namedtuple(*map(fun, some_tuple))

do not w或k.

some_tuple is constructed at runtime and can have different fieldnames. F或 example a person but I don't know that bef或e:

Person = namedtuple("Person", ["Firstname", "Lastname"])
some_tuple = Person("Foo", None)

然后,处理后的namedtuple应该看起来像(Firstname="'Foo'", Lastname="Unknown")

Is there a generic approach 或 do I have to know the members bef或e hand?

推荐答案

不完全确定这是否是您想要的:

from inspect import signature
from collections import namedtuple

Person = namedtuple("Person", ["Firstname", "Lastname"])
some_tuple = Person("Foo", None)

def fun(val):
    if val is None:
        return "Unknown"
    return f"'{val}'"

processed_tuple = namedtuple('X', signature(type(some_tuple)).parameters
                             )._make(map(fun, some_tuple))

或者:

processed_tuple = namedtuple('X', some_tuple._fields
                             )._make(map(fun, some_tuple))

输出:

X(Firstname="'Foo'", Lastname='Unknown')

Python-3.x相关问答推荐

我在创建Pandas DataFrame时感到困惑

具有多个值的极轴旋转和熔化/取消旋转(反转旋转)操作(Pandas 堆叠/取消堆叠交替/UDF覆盖)

Python中根据分组/ID对两个数据框进行映射,以更接近值的升序排列

将值从函数传递到标签

pip install saxonche v 12.1.0 产生 FileNotFoundError

转换Pandas 数据框 - 添加行

将两列合并为一列,将它们制成字典 - pandas - groupby

为什么 return node.next 会返回整个链表?

如何在 VSCode 的在 Cloud Run Emulator 上运行/调试构建设置中添加 SQL 连接

python 3集合中的Discard()和Remove()函数有什么区别

PyQt:退出时没有错误消息(回溯)

基本 Flask 应用程序未运行(TypeError:模块中缺少必填字段type_ignores)

Jupyter Notebook - 在函数内绘图 - 未绘制图形

如何在不使用 @hydra.main() 的情况下获取 Hydra 配置

AttributeError:系列对象没有属性iterrows

在 Ubuntu 上为 Python3 安装 mod_wsgi

在python中打印下标

如何将文档字符串放在 Enums 上?

为什么某些代码在 Python2 中是确定性的,而在 Python 3 中是非确定性的?

Beautifulsoup 的单元测试失败