[英]How to sort a list based on the summation of second elements of tuple within a list?
[英]Sort a tuple with n elements based on a list with x elements
我有一个如下所示的元组
all_combi= [
('a', 33.333333333333336),
('a', 38.333333333333336),
('a', 43.333333333333336),
('a', 48.333333333333336),
('a', 53.333333333333336),
('a', 58.333333333333336),
('a', 63.333333333333336),
('a', 68.33333333333334),
('a', 73.33333333333334),
('a', 78.33333333333334),
('a', 83.33333333333334),
('a', 88.33333333333334),
('a', 93.33333333333334),
('a', 98.33333333333334),
('b', 33.333333333333336),
('b', 38.333333333333336),
('b', 43.333333333333336),
('b', 48.333333333333336),
('b', 53.333333333333336),
('b', 58.333333333333336),
('b', 63.333333333333336),
('b', 68.33333333333334),
('b', 73.33333333333334),
('b', 78.33333333333334),
('b', 83.33333333333334),
('b', 88.33333333333334),
('b', 93.33333333333334),
('b', 98.33333333333334),
('c', 33.333333333333336),
('c', 38.333333333333336),
('c', 43.333333333333336),
('c', 48.333333333333336),
('c', 53.333333333333336),
('c', 58.333333333333336),
('c', 63.333333333333336),
('c', 68.33333333333334),
('c', 73.33333333333334),
('c', 78.33333333333334),
('c', 83.33333333333334),
('c', 88.33333333333334),
('c', 93.33333333333334),
('c', 98.33333333333334)]
我想根据这个列表对这个元组进行排序
instr_list. = ['a', 'b', 'c']
下面给出了预期的 output 的样品
[[
('a', 33.333333333333336),
('b', 33.333333333333336),
('c', 33.333333333333336)
], [
[('a', 33.333333333333336),
('b', 38.333333333333336),
('c', 43.333333333333336)]
]]
我尝试了此处给出的以下解决方案来根据列表对元组进行排序。 但它没有给出预期的结果。 我尝试使用显式循环,但它不起作用。 任何帮助表示赞赏...
def get_slab_list(all_combi, instr_list):
out_master_list = []
for i in range(len(instr_list)):
#k=0
out_list=[]
for j in all_combi:
if j[0] == instr_list[i]:
out_list.append(j[1])
out_master_list.append(out_list)
return out_master_list
sample = get_slab_list(all_combi, instr_list)
这是您可以尝试的解决方案,使用sorted
+ groupby
from itertools import groupby
# if data is already sorted, you can avoid this step.
all_combi = sorted(all_combi, key=lambda x: x[1])
print(
[[i for i in v if i[0] in instr_list] # filter out only required keys
for _, v in groupby(all_combi, key=lambda x: x[1])]
)
[[('a', 33.333333333333336),
('b', 33.333333333333336),
('c', 33.333333333333336)],
[('a', 38.333333333333336),
('b', 38.333333333333336),
('c', 38.333333333333336)],
...
尝试这个:
def get_slab_list(all_combi, instr_list):
all_combi.sort()
op = []
div = len(all_combi)//len(instr_list)
for i in range(div):
tmp = []
for j in range(len(instr_list)):
tmp.append(all_combi[j*div + i])
op.append(tmp)
return op
all_combi= [('a', 33.333333333333336), ('a', 38.333333333333336), ('a', 43.333333333333336), ('a', 48.333333333333336), ('a', 53.333333333333336), ('a', 58.333333333333336), ('a', 63.333333333333336), ('a', 68.33333333333334), ('a', 73.33333333333334), ('a', 78.33333333333334), ('a', 83.33333333333334), ('a', 88.33333333333334), ('a', 93.33333333333334), ('a', 98.33333333333334), ('b', 33.333333333333336), ('b', 38.333333333333336), ('b', 43.333333333333336), ('b', 48.333333333333336), ('b', 53.333333333333336), ('b', 58.333333333333336), ('b', 63.333333333333336), ('b', 68.33333333333334), ('b', 73.33333333333334), ('b', 78.33333333333334), ('b', 83.33333333333334), ('b', 88.33333333333334), ('b', 93.33333333333334), ('b', 98.33333333333334), ('c', 33.333333333333336), ('c', 38.333333333333336), ('c', 43.333333333333336), ('c', 48.333333333333336), ('c', 53.333333333333336), ('c', 58.333333333333336), ('c', 63.333333333333336), ('c', 68.33333333333334), ('c', 73.33333333333334), ('c', 78.33333333333334), ('c', 83.33333333333334), ('c', 88.33333333333334), ('c', 93.33333333333334), ('c', 98.33333333333334)]
instr_list=['a','b','c']
sample = get_slab_list(all_combi, instr_list)
print(sample)
output:
[[('a', 33.333333333333336), ('b', 33.333333333333336), ('c', 33.333333333333336)], [('a', 38.333333333333336), ('b', 38.333333333333336), ('c', 38.333333333333336)], [('a', 43.333333333333336), ('b', 43.333333333333336), ('c', 43.333333333333336)], [('a', 48.333333333333336), ('b', 48.333333333333336), ('c', 48.333333333333336)], [('a', 53.333333333333336), ('b', 53.333333333333336), ('c', 53.333333333333336)], [('a', 58.333333333333336), ('b', 58.333333333333336), ('c', 58.333333333333336)], [('a', 63.333333333333336), ('b', 63.333333333333336), ('c', 63.333333333333336)], [('a', 68.33333333333334), ('b', 68.33333333333334), ('c', 68.33333333333334)], [('a', 73.33333333333334), ('b', 73.33333333333334), ('c', 73.33333333333334)], [('a', 78.33333333333334), ('b', 78.33333333333334), ('c', 78.33333333333334)], [('a', 83.33333333333334), ('b', 83.33333333333334), ('c', 83.33333333333334)], [('a', 88.33333333333334), ('b', 88.33333333333334), ('c', 88.33333333333334)], [('a', 93.33333333333334), ('b', 93.33333333333334), ('c', 93.33333333333334)], [('a', 98`.33333333333334), ('b', 98.33333333333334), ('c', 98.33333333333334)]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.