我是python中的菜鸟,我想我有一个相关的问题。
我在python中有这两个列表:
在listA中,我有我的mysql表的列名。
listA = ["columnA","columnB","columnC"]
在listB中,我有查询此值的结果
listB = [["10","30","40"],
["14","28","38"],
["13","23","45"]]
在python中生成这样的输出的最有效方法是什么?
columnA = 10, columnB = 30, columnC = 40
columnA = 14, columnB = 28, columnC = 38
columnA = 13, columnB = 23, columnC = 45
答案 0 :(得分:2)
字典列表效果很好:
>>> [dict(zip(listA, row)) for row in listB]
[{'columnA': '10', 'columnC': '40', 'columnB': '30'}, {'columnA': '14', 'columnC': '38', 'columnB': '28'}, {'columnA': '13', 'columnC': '45', 'columnB': '23'}]
>>>
答案 1 :(得分:2)
这是单行(根据你的标题):
print '\n'.join([ ', '.join([ listA[i]+"="+x[i] for i in range(len(x)) ]) for x in listB ] )
括号for
中[]
的符号称为list comprehensions。有关更多详细信息,请参阅Python文档。单行使用嵌套列表推导:
外部部分正在解析listB的外部列表,如下例所示。这有助于我们逐行解析listB。
[ repr(x) for x in listB ]
内部部分正在解析listB行以构建字符串。我们正在迭代索引而不是元素本身,以便从listA获取列名:
[ listA[i]+"="+x[i] for i in range(len(x)) ]
相当于:
for i in range(len(x)):
listA[i]+"="+x[i]
第三行产生:
['columnA=13', 'columnB=23', 'columnC=45']
然后我们需要将它组合成一个带有昏迷分离的字符串:
', '.join(['columnA=13', 'columnB=23', 'columnC=45'])
结果:
'columnA=13, columnB=23, columnC=45'
因此,表达式:
[ ', '.join([ listA[i]+"="+x[i] for i in range(len(x)) ]) for x in listB ]
结果:
[ 'columnA=10, columnB=30, columnC=40',
'columnA=14, columnB=28, columnC=38',
'columnA=13, columnB=23, columnC=45' ]
然后,我们将整体结果与换行符'\n'
合并:
print '\n'.join([ 'columnA=10, columnB=30, columnC=40',
'columnA=14, columnB=28, columnC=38',
'columnA=13, columnB=23, columnC=45' ])
结果:
columnA=10, columnB=30, columnC=40
columnA=14, columnB=28, columnC=38
columnA=13, columnB=23, columnC=45
答案 2 :(得分:0)
不是最有效的方法,需要两行,但您可以尝试以下代码:
listA = ["columnA","columnB","columnC"]
listB = [["10","30","40"],
["14","28","38"],
["13","23","45"]]
for item in listB:
print("%s = %s, %s = %s, %s = %s" % (listA[0], item[0], listA[1], item[1], listA[2], item[2]))
试试here。
答案 3 :(得分:0)
广泛的for循环就足够了
for i in range (len(listB)):
print(listA[0]+" = "+listB[i][0]+","+listA[1]+" = "+listB[i][1]+","+listA[2]+" = "+listB[i][2])
i=+1