根据标识符列表对元素进行分组

时间:2019-11-14 16:31:01

标签: python list grouping

我有以下列表:

[ 1, 2, 3, 4, 5, 6, 7, 8, 9]

我想根据此列表中的ID号对元素进行分组:

[2, 1, 0, 0, 0, 1, 1, 2, 0]

所以我得到了

[[3, 4, 5, 9], [2, 6, 7], [1, 8]]

谢谢

2 个答案:

答案 0 :(得分:1)

假设您的第一个列表是唯一的。您可以创建字典并根据键进行排序。 如果您的python版本是2. *,请使用sorted(dictA.iteritems())代替sorted(dictA.items())

keys = [ 1, 2, 3, 4, 5, 6, 7, 8, 9]
values = [2, 1, 0, 0, 0, 1, 1, 2, 0]
dictA = dict(zip(keys, values))
res = {}

for key, value in sorted(dictA.items()):
    res.setdefault(value, []).append(key)
print(res)

编辑1:以便对字典进行排序并获取字典值

import collections
od = collections.OrderedDict(sorted(res.items()))
list(od.values())

您必须在这里做一些工作。希望这会有所帮助。

答案 1 :(得分:0)

这将生成所需输出列表的列表

values = [1, 2, 3, 4, 5, 6, 7, 8, 9]
keys = [2, 1, 0, 0, 0, 1, 1, 2, 0]

nKeys = len(set(keys))

result = [ [] for i in range(nKeys)]

for kid, vid in zip(keys, values):
    result[kid].append(vid)