如何变异命名的倍数?

2024-10-01 05:00:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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))

_行的一个示例元素:

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'

我在想,也许可以用我想要的更改重新创建这个namedtuple,比如将rlnVoltage替换为200000000而不是300000000,然后将列表中的这个namedtuple替换为新的变种?我该怎么做

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


Tags: columnsselfdefargsmoviesnamedtuple命名kwargs
1条回答
网友
1楼 · 发布于 2024-10-01 05:00:46

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非公共部分使用单下划线的惯例,在本例中,_replace是公共API的一部分

相关问题 更多 >