小编典典

何时以及为什么应该使用命名元组而不是字典?

all

什么情况下应该使用namedtuple?

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

只能将字典的相同哈希类型用于命名元组吗?


阅读 62

收藏
2022-06-13

共1个答案

小编典典

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

但是,它们有更严格的限制——它们的等效键“字段名称”必须是字符串。

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

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)

作为替代品。

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

mynamedtuple.fieldname

mydict['fieldname']

mynamedtuple = MyNamedTuple(firstvalue, secondvalue)

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

最后,namedtuples 是有序的,与常规dicts 不同,因此您按照定义字段的顺序获取项目,与 a 不同dict

2022-06-13