代码之家  ›  专栏  ›  技术社区  ›  N.Varela

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

  •  0
  • N.Varela  · 技术社区  · 5 年前

    我有两个不同的元组列表,它们具有不同的结构,我想附加它们。第一,, attribute 是一个元组列表,其中单个元组中的每个值都是字符串,并且始终在值后加逗号,如下所示

    [('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)
    

    这对我来说很好 列表,但不适用于 价值 . 有什么想法吗?谢谢

    5 回复  |  直到 5 年前
        1
  •  3
  •   DirtyBit    5 年前

    使用 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
    
        2
  •  1
  •   Arkistarvh Kltzuonstev    5 年前

    如果要将所需输出写入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=';')
    
        3
  •  1
  •   han solo    5 年前

    你可以这样做,

    >>> header
    [('id',), ('attr_1',), ('attr_2',)]
    >>> x
    [(111, 222, 333), ('aaa', 'bbb', 'ccc'), ('a1', 'b2', 'c3')]
    >>> ';'.join(x[0] for x in header)
    'id;attr_1;attr_2'
    >>> print('\n'.join(';'.join(str(_) for _ in y) for y in zip(*x)))
    111;aaa;a1
    222;bbb;b2
    333;ccc;c3
    
        4
  •  1
  •   Daweo    5 年前

    你不能 .join int s、 你应该把它们转换成 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

        5
  •  0
  •   Christian Sloper    5 年前

    您也可以在第二个列表上执行join,但需要在列表的每个元素上执行join。F.ex按清单Compherence:

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