Python-从数组中删除所有重复的Enteries

时间:2018-10-24 22:22:00

标签: python sql

我遇到了问题。

我正在执行SQL命令以获取一些数据。在数据中,我创建了具有相同ID的行。我想要的是将所有具有相同ID的数据放入一个数组中。 这是我所拥有的:

             ID Var1 Var2
    data = [[1,  A,   B],
            [1,  C,   D],
            [1,  E,   F],
            [2,  A,   B],
            [2,  C,   D],
            [2,  E,   F]]

如您所见,具有相同ID的行被放入单独的数组中。这就是我想要的:

    data = [[1,  A,   B,   C,   D,   E,   F],
            [2,  A,   B,   C,   D,   E,   F]]

所以我只想要1个ID,并将具有该ID的所有值放入1个数组中。

这是我的代码:

mycursor.execute("SELECT ID, Var1, Var2 FROM Test_Database")
result = mycursor.fetchall ()

data = []
for row in result :
data.append(row)

print(data)

我在做什么错了?

3 个答案:

答案 0 :(得分:1)

也许制作一个以ID为键的字典?

类似这样的东西:

from collections import defaultdict
data_dict = defaultdict(list)
for row in result:
    id_ = row[0]
    for item in row[1:]:
        data[id_].append(item)

答案 1 :(得分:0)

要具有具有相同结构的列表列表:

app/build.gradle

build.gradle将是您在描述中想要的。

答案 2 :(得分:0)

MySQL的结果以值元组形式返回。每次调用data.append()时,您只是将该行追加到列表中,因此您将获得一个包含表中所有行的返回值的列表。您所期望的是一个列表,其中唯一的行ID作为第一个元素,而查询返回的所有其他可能的其他列值作为其余元素。

由于无论如何都需要唯一ID,因此应该使用字典:

data_results = {}
for row in results:
    row_id = query_results[0]
    if row_id in data_results:
        data_results[row_id]).extend(query_results[1:])
    else:
        data_results[row_id] = query_results[1:]

这应该具有预期的效果,尽管它是列表的字典而不是列表的列表。如果您需要该列表保持特定顺序,则建议您在OrderedDict上查找详细信息。