【问题标题】:Creating named tuple from tuple?从元组创建命名元组?
【发布时间】:2017-07-02 02:41:30
【问题描述】:

我正在使用 kinterbasdb 从 1998 年的数据库中选择和更新一些数据(是的,不幸的是:()。kinterbasdb 的 API 从元组中的查询返回值,例如:

connection = connect(dsn="database.gdb", user="MYUSER", password="MYPASSWORD")
cursor = connection.cursor()
cursor.execute("SELECT * FROM TABLE_X")
result = cursor.fetchone() # tuple => (value1, value2, value3, value4, value5)

我想将此元组映射到一个命名元组。有可能吗?

我正在使用 Python 2.7.13(我能够更新 kinterbasdb 模块以使其工作......至少)

【问题讨论】:

  • 你检查docs了吗?
  • 我没找到。谢谢!!!!

标签: python tuples kinterbasdb


【解决方案1】:

只需使用 * 将您的元组作为扩展参数传递给 namedtuple 构造函数。

In [1]: from collections import namedtuple

In [2]: Response = namedtuple('Response', ['thing1', 'thing2', 'thing3', 'thing4'])

In [3]: mytuple = (1, 2, 3, 4)

In [4]: Response(*mytuple)
Out[4]: DBResponse(thing1=1, thing2=2, thing3=3, thing4=4)

【讨论】:

  • 虽然严格来说这不是一个错误,但我认为最好为您传递给它的 namedtuple 类型使用相同的变量名称作为其名称。也就是说,要么将Response 更改为DBResponse,反之亦然。
【解决方案2】:

例子:

from collections import namedtuple
t=("value1", "value2", "value3", "value4", "value5")
Data=namedtuple("Data",["v1","v2","v3","v4","v5"])
nt=Data(*t)
>>> nt
Data(v1='value1', v2='value2', v3='value3', v4='value4', v5='value5')

或者使用_make方法:

>>> Data._make(t)
Data(v1='value1', v2='value2', v3='value3', v4='value4', v5='value5')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2017-11-13
    • 2011-01-12
    相关资源
    最近更新 更多