Python:将String转换为带有扭曲的元组或列表

时间:2013-10-11 15:59:43

标签: python list tuples

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

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 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:1)

您几乎肯定不想创建变量,而是使用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')}

答案 2 :(得分:1)

使用时一定要使用字典变量。

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

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

在内部,局部变量也是一个可以使用locals()访问的字典。 但是,正如the documentation所说:

  

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

答案 3 :(得分: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':
    ...