何时以及为什么我应该使用namedtuple而不是字典?

2024-06-16 09:44:14 发布

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

Possible Duplicate:
What are “named tuples” in Python?

应该使用namedtuple的情况是什么?

当我研究它时,它看起来像是一种使元组更像字典的方法。它们与字典相比如何?

只能将字典的相同哈希类型用于namedtuples吗?


Tags: 方法in类型字典情况namedtuplewhatare
2条回答

元组是不可变的,无论是否命名。namedtuple只通过使用名称而不是索引,使访问更加方便。您只能对namedtuple使用有效的标识符,它不执行任何哈希-而是生成一个新类型。

dicts中,只有键必须是可散列的,而不是值。namedtuple没有键,所以哈希不是问题。

然而,它们有一个更严格的限制——它们的等价键“字段名”必须是字符串。

基本上,如果要创建类的一堆实例,比如:

class Container:
    def __init__(self, name, date, foo, bar):
        self.name = name
        self.date = date
        self.foo = foo
        self.bar = bar

mycontainer = Container(name, date, foo, bar)

__init__中设置属性后,不要更改这些属性,您可以使用

Container = namedtuple('Container', ['name', 'date', 'foo', 'bar'])

mycontainer = Container(name, date, foo, bar)

作为替代品。

当然,您可以创建一组dict,在其中每个键中使用相同的键,但是假设您只有有效的Python标识符作为键,并且不需要可变性

mynamedtuple.fieldname

mydict['fieldname']

以及

mynamedtuple = MyNamedTuple(firstvalue, secondvalue)

mydict = {'fieldname': firstvalue, 'secondfield': secondvalue}

最后,namedtuples是有序的,不像常规的dicts,因此您可以按照定义字段的顺序获取项,不像dict

相关问题 更多 >