如何取消列出两个不同的元组列表到相同的结构并追加到文件对象?

时间:2019-03-06 08:16:11

标签: python list tuples

我要附加两个具有不同结构的元组列表。第一个attribute是一个列表o元组,每个元组中的每个值都作为字符串,并且在值后始终带有逗号,例如

[('id',), ('attr_1',), ('attr_2',), ...]

第二个value是一个元组列表,其中所有与属性匹配的值都在一个元组中,并用字符串和数字填充,例如

[(111, 222, 333), ('aaa', 'bbb', 'ccc'), ('a1', 'b2', 'c3'), ...]

我想绑定两个对象,从而得到这样的文件输出

id; attr_1; attr_2; ...
111; aaa; a1; ...
222; bbb; b2; ...
333; ccc; c3; ...

我到目前为止尝试过

attr = (list(sum(attribute, ())) )
attri = ";".join(attr)

attribute列表上工作正常,但在value上则无效。有任何想法吗?谢谢

5 个答案:

答案 0 :(得分:3)

使用zip

test_tup = [(111, 222, 333), ('aaa', 'bbb', 'ccc'), ('a1', 'b2', 'c3')]
print(list(zip(*test_tup)))

输出:

[(111, 'aaa', 'a1'), (222, 'bbb', 'b2'), (333, 'ccc', 'c3')]

要将它们一起写成;

print('; '.join(' '.join(str(x) for x in i) for i in headers))
print('\n'.join('; '.join(str(x) for x in i) for i in res))

输出

id; attr_1; attr_2
111; aaa; a1
222; bbb; b2
333; ccc; c3

答案 1 :(得分:1)

如果要将想要的输出写入csv文件,请尝试以下操作:

import pandas as pd
a = [('id',), ('attr_1',), ('attr_2',), ...]
b = [(111, 222, 333), ('aaa', 'bbb', 'ccc'), ('a1', 'b2', 'c3'), ...]
df = pd.DataFrame({a[i][0] : b[i] for i in range(len(a))}) # length of a and each item inside b must be same
df.to_csv(file_name, sep=';')

答案 2 :(得分:1)

您可以做类似的事情,

Oracle-XML-Functions

答案 3 :(得分:1)

您不能.join int个,应该先将它们转换为str,然后再使用zip

values = [(111, 222, 333), ('aaa', 'bbb', 'ccc'), ('a1', 'b2', 'c3')]
values = [tuple(str(j) for j in i) for i in values]
out = ['; '.join(i) for i in zip(*values)]
print(out) #['111; aaa; a1', '222; bbb; b2', '333; ccc; c3']

如果希望单个out = '\n'.join(out),则可以在out = ['; '.join(i) for i in zip(*values)]之后添加str行。

答案 4 :(得分:0)

您也可以在第二个列表上进行联接,但是您需要在列表的每个元素上进行联接。 F.ex按列表补充:

value_list = [ ";".join(i) for i in value]