如何使用python检测列表中的不同元素并从中创建新列表(查找)

时间:2019-03-27 09:01:44

标签: python python-2.7 list scripting

要按元素发送电子邮件元素,我需要首先检测列表中的不同元素,然后根据它们创建新列表。

有人可以帮助我解决以下问题吗?

我提到的列表也与另一个列表相互关联。

我有:

list_I = [123, 453, 444, 555, 567, ...]

list_II = [A , A, B, C, B, ....]

我希望得到的是:

New_list_I = [123, 453]

New_list_I_a = [A, A]
New_list_II = [444,567]

New_list_II_a = [B, B]
New_list_III = [555]

New_list_III_a = [C]

2 个答案:

答案 0 :(得分:1)

一种方法是从两个列表中创建字典:

from collections import defaultdict
d = defaultdict(list)
for k,v in zip(list_2, list_1):
    d[k].append(v)

# defaultdict(list, {'A': [123, 453], 'B': [444, 567], 'C': [555]})

然后使用列表推导从字典中获取指定的输出。

[[[k for _ in range(len(v))], v] for k,v in d.items()]
# [[['A', 'A'], [123, 453]], [['B', 'B'], [444, 567]], [['C'], [555]]]

请注意,嵌套的列表结构比动态创建的一系列列表更易于处理和使用。请注意,您可以从此结果中使用Basic Slicing and Indexing

选择每个结果子列表。

答案 1 :(得分:0)

为什么不只用键,值从这两个列表中创建字典,然后根据值排序:

list_I = [123, 453, 444, 555, 567]
list_II = ['A' , 'A', 'B', 'C', 'B']

res = dict(zip(list_I, list_II))
print(sorted(res.items(), key=lambda x:x[1]))

输出

[(123, 'A'), (453, 'A'), (444, 'B'), (567, 'B'), (555, 'C')]