[英]Python: Convert a String into a tuple or list with a twist
我有一組看起來像這樣的數據:
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])
定義元組時碰壁。
任何人都可以在這里給我指點一下。
里克
您可以做的是,創建一個dict
,並將它們添加為key:value對:
>>> d = dict()
>>>
>>> s = 'CPU0Tjmax|90degreesC|ok'
>>> li = s.split("|")
>>>
>>> d[li[0]] = (li[1], li[2])
>>> d
{'CPU0Tjmax': ('90degreesC', 'ok')}
您幾乎可以肯定不想創建變量,而應使用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')}
使用時一定要使用字典變量。
為了完整起見,這里提供了一個用於創建新局部變量的非標准解決方案:
for line in open("data.dat"):
e=line.split("|")
locals()[e[0]] = ( e[1], e[2] )
在內部,局部變量也是一個字典,您可以使用locals()
訪問。 但是,正如文檔所述 :
該字典的內容不得修改; 更改可能不會影響解釋器使用的局部變量和自由變量的值。
其他答案很好。 這是另一種方式,類似於使用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':
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.