python - 如何改变命名元组?

标签 python python-3.x namedtuple

我有一个命名元组列表。我想改变里面的一些值,但是元组当然是不可变的。我想知道是否可以替换整个元组,但首先我需要了解它的结构,这是我在文档中没有找到的。

def _createRowClass(self):
    self.Row = namedtuple('Row', [str(c) for c in self._columns])
#_columns is a dict.

def addRow(self, *args, **kwargs):
    self._rows.append(self.Row(*args, **kwargs))

_rows 的示例元素:

Out[40]: Row(rlnCoordinateX='1951.892292', rlnCoordinateY='1482.277896', rlnHelicalTubeID='6', rlnAngleTiltPrior='90.000000', rlnAnglePsiPrior='-110.29072', rlnHelicalTrackLength='1264.598540', rlnAnglePsiFlipRatio='0.500000', rlnImageName='000243@Extract/job011/Movies/Microtubules_02563.mrcs', rlnMicrographName='MotionCorr/job003/Movies/Microtubules_02563.mrc', rlnMagnification='10000.000000', rlnDetectorPixelSize='5.480000', rlnCtfMaxResolution='5.830000', rlnCtfFigureOfMerit='0.124704', rlnVoltage='300.000000', rlnDefocusU='7457.819824', rlnDefocusV='6964.129883', rlnDefocusAngle='33.520000', rlnSphericalAberration='2.700000', rlnCtfBfactor='0.000000', rlnCtfScalefactor='1.000000', rlnPhaseShift='0.000000', rlnAmplitudeContrast='0.100000', rlnOriginX='0.000000', rlnOriginY='0.000000')

当我索引namedtuple时,我得到了值,但没有得到键,那么这到底是什么:rlnAmplitudeContrast='0.100000'?

我想也许可以用我想要的更改重新创建这个命名元组,比如将 rlnVoltage 替换为 200,000000 而不是 300,000000,然后用新的变异元组替换列表中的这个命名元组?我怎样才能做到这一点?

如有任何其他建议和想法,我们将不胜感激。

最佳答案

namedtuple创建的类型的对象有一个._replace方法,可以方便地创建一个带有更新字段(而不是变异)的新元组:

>>> from collections import namedtuple
>>> Record = namedtuple('Record', 'name age id')
>>> r = Record('Juan', '30', 1)
>>> r
Record(name='Juan', age='30', id=1)
>>> r._replace(name='Pablo')
Record(name='Pablo', age='30', id=1)
>>> r._replace(name='Jon', age='31')
Record(name='Jon', age='31', id=1)

请注意,namedtuple 对象打破了 API 非公共(public)部分的单下划线约定,在本例中,_replace 是公共(public) API 的一部分。

关于python - 如何改变命名元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59870312/

相关文章:

python - NetworkX:在 for 循环中绘制图形返回错误的图形

python - 当术语在 bash 中显示时终止终端应用程序

python - 如何更改 CharField 选择列表行为

Python:替换嵌套命名元组上的属性的简单方法?

python - request.POST django 中 QueryDict 的奇怪行为

python - 如何禁用 nosetest 插件

python - 在多个线程中重用 Tensorflow session 导致崩溃

python - 为什么调用 argparse.parse_args() 或 .parse_args(sys.argv) 时会有所不同

python - 如何使用 Python namedtuples 将行插入 mySQL 数据库

python - 存储固定 key key :value datasets that are accessed by keys in python?的最佳方式