应该使用namedtuple的情况是什么?
当我调查它时,它看起来像是一种让元组更像字典的方法。他们如何与字典相比?
只能为字典使用相同的字典类型吗?
答案 0 :(得分:194)
在dict
中,只有键必须是可清除的,而不是值。 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)
在<{1}}中设置后,和不会更改属性,您可以改为使用
__init__
作为替代品。
当然,您可以创建一堆Container = namedtuple('Container', ['name', 'date', 'foo', 'bar'])
mycontainer = Container(name, date, foo, bar)
,其中每个都使用相同的键,但假设您只有有效的Python标识符作为键,并且不需要可变性,
dict
比
更漂亮mynamedtuple.fieldname
和
mydict['fieldname']
比
更漂亮mynamedtuple = MyNamedTuple(firstvalue, secondvalue)
最后,与常规mydict = {'fieldname': firstvalue, 'secondfield': secondvalue}
不同,namedtuple
是有序的,因此您按照定义字段的顺序获取项目,而不是dict
。
答案 1 :(得分:34)
无论是否命名,元组都是不可变的。 namedtuple
仅通过使用名称而不是索引来使访问更方便。您只能使用namedtuple
的有效标识符,它不会执行任何哈希 - 它会生成新类型。