Python:将一个字符串转换成一个带有twis的元组或列表

2024-10-01 00:35:33 发布

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

我有一组数据看起来是这样的:

OutletCntrTemp|25degreesC|ok
InletTemp|17degreesC|ok
PCHTemp|46degreesC|ok
P0ThermMargin|-57degreesC|ok
P1ThermMargin|-59degreesC|ok
P0DIMMTemp|27degreesC|ok
P1DIMMTemp|27degreesC|ok
HSC0InputPower|60Watts|ok
HSC0InputVolt|12.46Volts|ok
CPU0Tjmax|90degreesC|ok
......

现在,我想遍历这些数据,在函数中创建一个列表或元组,然后返回每一行,但使用字符串的第一部分命名该元组:

^{pr2}$

现在我通过|对字符串进行了一些拆分,但是当我试图使用string[0] = (string[1],string[2])来定义元组时,遇到了麻烦。在

谁能给我一个指针吗。在

里克


Tags: 数据字符串stringok元组voltsp0dimmtempoutletcntrtemp
3条回答

您几乎肯定不想创建变量,请改用dict

data = [
    'CPU0Tjmax|90degreesC|ok',
    'InletTemp|17degreesC|ok'
]
d = {el[0]: tuple(el[1:]) for el in (item.split('|') for item in data)}
# {'InletTemp': ('17degreesC', 'ok'), 'CPU0Tjmax': ('90degreesC', 'ok')}

您可以做的是,创建一个dict,并将它们添加为键:值对其中:

>>> d = dict()
>>> 
>>> s = 'CPU0Tjmax|90degreesC|ok'
>>> li = s.split("|")
>>> 
>>> d[li[0]] = (li[1], li[2])
>>> d
{'CPU0Tjmax': ('90degreesC', 'ok')}

其他的答案是好的。这里还有一种方法,类似于使用locals()的答案。您只需创建一个空对象,并填充它的“dict”:

class X(object):
    pass

Var = X()

for ...:
    Var.__dict__[string[0]] = (string[1], string[2])

#now you can refer to your vars as Var.whatever
if Var.InletTemp[1] != 'ok':
    ...

相关问题 更多 >