簡體   English   中英

Python:通過扭曲將字符串轉換為元組或列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM