在我看来,标准库namedtuple类是一种使元组更像字典的方法。如何命名元组比较字典?什么时候使用它们?它们是否适用于非哈希类型?
元组是不可变的,无论是否命名。Namedtuple只是通过使用名称而不是索引使访问更加方便。您只能为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)
作为替代品。
当然,你可以创建一堆字典,在每个字典中使用相同的键,但假设你只使用有效的Python标识符作为键,并且不需要可变性,
mynamedtuple.fieldname
比
mydict['fieldname']
and
mynamedtuple = MyNamedTuple(firstvalue, secondvalue)
比
mydict = {'fieldname': firstvalue, 'secondfield': secondvalue}
最后,命名元组是有序的,这与常规字典不同,因此您可以按照定义字段的顺序获取项,这与字典不同。
推荐文章
- 不区分大小写的替换
- 好的Python模块模糊字符串比较?
- _tkinter。TclError:没有显示名称和没有$ display环境变量
- 在scikit-learn线性回归中找到p值(显著性)
- 如何上传文件与python请求?
- 熊猫未来预警如何压制?
- 如何断言两个列表包含相同的元素在Python?
- Python pandas:将带参数的函数应用到一个序列中
- Python 3。X舍入行为
- 什么时候,为什么我应该使用命名元组而不是字典?
- 如何从字符串剥离所有空白
- 如何从Python中的文件名中替换(或剥离)扩展名?
- 'setdefault' dict方法用例
- Python函数属性-使用和滥用
- 找出两个数据帧之间的差异