Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中按索引合并列表_Python_List - Fatal编程技术网

Python中按索引合并列表

Python中按索引合并列表,python,list,Python,List,场景:我从一个N-triples文件中检索了3个列表,现在我正试图将它们合并成一个单一的、有组织的列表 原始格式: +--------+---------+--------+ | 100021 | hasdata | y | +--------+---------+--------+ | 100021 | name | USER1 | +--------+---------+--------+ | 100021 | extra1 | typer | +--------+--

场景:我从一个N-triples文件中检索了3个列表,现在我正试图将它们合并成一个单一的、有组织的列表

原始格式:

+--------+---------+--------+
| 100021 | hasdata | y      |
+--------+---------+--------+
| 100021 | name    | USER1  |
+--------+---------+--------+
| 100021 | extra1  | typer  |
+--------+---------+--------+
| 100021 | extra2  | reader |
+--------+---------+--------+
| 50003  | hasdata | y      |
+--------+---------+--------+
| 50003  | name    | USER2  |
+--------+---------+--------+
| 50003  | extra1  | reader |
+--------+---------+--------+
| 50003  | extra2  | writer |
+--------+---------+--------+
| 50003  | extra3  | coder  |
+--------+---------+--------+
| 30007  | hasdata | n      |
+--------+---------+--------+
| 30007  | name    | 0001   |
+--------+---------+--------+
| 30007  | extra1  | Null   |
+--------+---------+--------+
在循环ntriples文件时,我生成了3个列表(每个列表都是上表的一列)。我现在正试图将它们匹配成如下内容:

+--------+---------+-------+--------+--------+--------+
|        | hasdata | name  | extra1 | extra2 | extra3 |
+--------+---------+-------+--------+--------+--------+
| 100021 | y       | USER1 | typer  | reader |        |
+--------+---------+-------+--------+--------+--------+
| 50003  | y       | USER2 | reader | writer | coder  |
+--------+---------+-------+--------+--------+--------+
| 30007  | extra2  | n     | 0001   | Null   |        |
+--------+---------+-------+--------+--------+--------+
到目前为止,我使用了以下功能:

def listOfTuples(l1, l2, l3): 
    return list(map(lambda x, y, z:(x,y, z), l1, l2, l3)) 
但这只给了我一个直接合并的对应项目

问题:我知道可以在列表中循环,获取匹配项并手动构建数组/数据帧。我的问题是,是否有任何函数或包可以自动并以一种不太复杂的方式实现这一点


Obs:我已经有了通过手动循环生成数据帧的方法。我只是想知道是否还有其他更有效的方法。

如果我理解正确,您有一个包含三个对象大小的元组元素的列表,您想将它们放在另一个元组中,您可以使用
zip
来实现这一点

result = list(zip(list1, zip(*[(l1,l2,l3) for i in list1])))

你说你想要一个数据帧,所以我假设熊猫操作是可以接受的

我还假设符号只是格式化的,而不是实际数据文件的一部分(将来,这些装饰器是不必要的,甚至对这些类型的问题有害)

使用给定的数据,我创建了一个df(
pd.read_csv
或类似的文件),然后对其进行透视

    col1    col2    col3
0   100021  hasdata y
1   100021  name    USER1
2   100021  extra1  typer
3   100021  extra2  reader
4   50003   hasdata y
5   50003   name    USER2
6   50003   extra1  reader
7   50003   extra2  writer
8   50003   extra3  coder
9   30007   hasdata n
10  30007   name    0001
11  30007   extra1  Null

df.pivot(index='col1',columns='col2',values='col3')

col2    extra1  extra2  extra3  hasdata name
col1                    
30007   Null    NaN     NaN     n       0001
50003   reader  writer  coder   y       USER2
100021  typer   reader  NaN     y       USER1

我只是尝试了一下,但要么我不知道如何正确实施,要么我不知道如何解释结果。我得到的是:@DGMS89哦,对不起,你必须使用列表(zip),修复了这个问题。@DGMS89还有另一件事,我假设你的l1,l2,l3是值(从我从你的代码中看到的),如果它们是列表,应该做一些小的调整。我会尝试处理这个问题。我唯一没有得到的是,项目的匹配应该分为两个级别(列表1和列表2)来设置结果(列表3),但使用zip,到目前为止,我只能按列表1进行索引。@DGMS89能否在
listOfTuples
函数中对l1、l2和l3进行分类?那么x,y,z是什么。我从你的问题中了解到的是,每行都有一个元组列表(你的n_三元组)。是的,我忘了pivot。它确实有效,但我的问题是我的ntriples文件大6.5gb,这就是我尝试处理列表的原因。这是有道理的,但在您最初的问题中,作为约束条件,这将是一个很好的细节