[英]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]解压缩为变量id
和desc
以便将P0030
存储在id
并将HO2S Heater Control Circuit
存储在desc
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.