0

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

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

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

CPUTjmax = ('90degreesC','ok')

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

任何人都可以在这里给我一个指点。

里克

4

4 回答 4

8

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

>>> d = dict()
>>> 
>>> s = 'CPU0Tjmax|90degreesC|ok'
>>> li = s.split("|")
>>> 
>>> d[li[0]] = (li[1], li[2])
>>> d
{'CPU0Tjmax': ('90degreesC', 'ok')}
于 2013-10-11T16:02:01.633 回答
1

您几乎可以肯定不想创建变量,dict而是使用 a :

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')}
于 2013-10-11T16:03:18.477 回答
1

使用绝对应该使用字典变量。

为了完整起见,这里有一个用于创建新局部变量的非标准解决方案:

for line in open("data.dat"):
   e=line.split("|")
   locals()[e[0]] = ( e[1], e[2] )

在内部,局部变量也是一个字典,您可以使用locals(). 但是,正如文档所述

不得修改本词典的内容;更改可能不会影响解释器使用的局部变量和自由变量的值。

于 2013-10-11T16:10:11.783 回答
1

其他答案都很好。这是另一种方法,类似于使用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':
    ...
于 2013-10-11T16:19:30.670 回答