繁体   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