标准库中的namedtuple
类似乎是将元组变得更像字典的一种方式。那么namedtuple
与dict
相比如何?什么时候应该使用它们?它们是否适用于非可哈希类型?
标准库中的namedtuple
类似乎是将元组变得更像字典的一种方式。那么namedtuple
与dict
相比如何?什么时候应该使用它们?它们是否适用于非可哈希类型?
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)
当然,你可以创建一堆包含相同键的字典,但假设你只会使用有效的Python标识符作为键且不需要可变性,as a replacement.
mynamedtuple.fieldname
比起原来,更漂亮
。mydict['fieldname']
并且mynamedtuple = MyNamedTuple(firstvalue, secondvalue)
比起…更漂亮mydict = {'fieldname': firstvalue, 'secondfield': secondvalue}
最后,namedtuple
是有序的,与常规的dict
不同,因此您会按照定义字段的顺序获取项目,而不是dict
。
mynamedtuple = MyNamedTuple(fieldname=firstvalue, secondfield=secondvalue)
。 - Bharat KhatriContainer = namedtuple('Container', 'name date foo bar')
来使实例化更加简洁漂亮。 - stackPusherdicts
是有顺序的,即按照插入顺序排序。 - user3064538元组是不可变的,无论是否命名。使用 namedtuple
只是通过使用名称而不是索引使访问更加方便。您只能为 namedtuple
使用有效的标识符,它不执行任何哈希操作,而是生成一个新类型。