簡體   English   中英

如何將元組列表轉換為單獨的字符串?

[英]How should I convert a list of tuples into separate strings?

import obd
connection = obd.OBD()
r = connection.query(obd.commands.GET_DTC)
print(r.value)


example output:
[
  ("P0030", "HO2S Heater Control Circuit"),
  ("P1367", "Unknown error code")
]

我想在每個輸出項(例如“ HO2S加熱器控制電路”)中存儲/訪問第二個值作為其自己的變量。 我需要將此輸出解碼為列表還是元組,還是兩者都解碼?

該代碼似乎來自的頁面

響應對象的value字段將包含一個元組列表,其中每個元組都包含DTC,以及該DTC的字符串描述(如果有)。

因此,如果r = connection.query(obd.commands.GET_DTC) ,則r.value是“元組列表”。 您可以使用zip()函數(如本問題所述 )將結構與zip(*r.value)換位,從而得到

    [('P0030', 'P1367'), ('HO2S Heater Control Circuit', 'Unknown error code')]

您只需要此列表的第二個元素,因此

    zip(*r.value)[1]

給你元組

    ('HO2S Heater Control Circuit', 'Unknown error code')

然后,您可以根據需要使用它。 請注意,這為您提供了所有 “每個輸出項目中的第二個值”。 您可以使用以下方法遍歷所有這些對象(並說打印每個對象):

    for description in zip(*r.value)[1]:
        print description

如果要多次使用zip(*r.value)[1] ,則可能是個好主意。

如果要使用第二個元素,則可以在for循環中將元組解包:

for _, var in r.value:
    # use var

即:

In [4]: l = [                                                                                           
  ("P0030", "HO2S Heater Control Circuit"),
  ("P1367", "Unknown error code")
]

In [5]: for _, var in l:
          print(var)
   ...:     
HO2S Heater Control Circuit
Unknown error code

如果出於某種原因想要全部使用它們,也可以使用具有以上邏輯或operator.itemgetter的list comp:

In [7]: list(map(itemgetter(1), l))
Out[7]: ['HO2S Heater Control Circuit', 'Unknown error code']

In [8]: from operator import itemgetter

In [9]: list(map(itemgetter(1), l))
Out[9]: ['HO2S Heater Control Circuit', 'Unknown error code']

您還可以使用itemgetter(-1)來獲取最后一個元素。

您可以“打開”一個元組。 因此,根據您的示例, r.value[0]是元組("P0030", "HO2S Heater Control Circuit")然后,

id, desc = r.value[0]

會將元組r.value [0]解壓縮為變量iddesc以便將P0030存儲在id並將HO2S Heater Control Circuit存儲在desc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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