如何从嵌套元组列表中配对提取元组第二个元素构建字典
解决方法
你的需求是把相邻的name和value元组配对,只提取它们的第二个元素组成字典,其实只需要两步:先拆分出所有的name值和value值,再配对成字典。
分步实现
首先看你的原始数据:
new = [[('name', 'n1')], [('value', 'v1')], [('name', 'n2')], [('value', 'v2')], [('name', 'n3')], [('value', 'v3')]]
提取所有name的第二个元素:用切片
new[::2]获取所有包含name的子列表,再通过列表推导式取出元组的第二个值:names = [item[0][1] for item in new[::2]] # 结果:['n1', 'n2', 'n3']提取所有value的第二个元素:同理,用切片
new[1::2]获取所有包含value的子列表,再提取对应值:values = [item[0][1] for item in new[1::2]] # 结果:['v1', 'v2', 'v3']配对成字典:用
dict(zip(names, values))把两个列表一一对应转成字典:res = dict(zip(names, values)) # 结果:{'n1': 'v1', 'n2': 'v2', 'n3': 'v3'}
简洁的一行写法
如果想更紧凑,也可以把上面的步骤合并成一行:
res = dict(zip([item[0][1] for item in new[::2]], [item[0][1] for item in new[1::2]]))
更直观的循环写法
如果你觉得列表推导式有点绕,用循环实现会更易懂:
res = {} # 步长设为2,每次处理一对name和value for i in range(0, len(new), 2): # 取出name元组的第二个元素 name = new[i][0][1] # 取出对应value元组的第二个元素 value = new[i+1][0][1] res[name] = value
运行上面的任意一种写法,都能得到你想要的结果。
内容的提问来源于stack exchange,提问作者formicaman
相关产品推荐
相关产品推荐

