我来自这个问题Get information out of sub-lists in main list elegantly,其中提出了一个很好的解决方案(实际上有两个)。将元组转换为元素列表
我现在的问题是,给出的答案承担一定数量列表中的元素(我从来没有说过元素的数量可能会改变,因此这是我的错真的),产生最终名单。
这是代码的MWE
:
a = [[0,1.1, 0.5, 99,99,0.7], [0,0.3, 1.4,99,99, 0.2], [1,0.6, 0.2,99,99, 1.], [1,1.1, 0.5,99,99, 0.3], [2,0.2, 1.1,99,99, 0.8], [2,1.1, 0.5,99,99, 1.], [3,1.2, 0.3,99,99, 0.6], [3,0.6, 0.4,99,99, 0.9], [4,0.6, 0.2,99,99, 0.5], [4,0.7, 0.2,99,99, 0.5]]
a_processed = []
from collections import defaultdict
nums = defaultdict(list)
for arr in a:
key = tuple(arr[1:5]) # make the first two floats the key
nums[key].append(arr[5]) # append the third float for the given key
a_processed = [[k[0], k[1], k[2], k[3], round(sum(vals)/len(vals),2)] for k, vals in nums.items()]
返回:
a_processed = [[0.7, 0.2, 99, 99, 0.5], [0.3, 1.4, 99, 99, 0.2], [0.6, 0.2, 99, 99, 0.75], [0.6, 0.4, 99, 99, 0.9], [1.2, 0.3, 99, 99, 0.6], [0.2, 1.1, 99, 99, 0.8], [1.1, 0.5, 99, 99, 0.67]]
我要替换的最后一行,其中明确姓名的元素k[0], k[1], k[2], k[3]
到更多的东西一般。我试着简单地使用:
a_processed = [[k, round(sum(vals)/len(vals),2)] for k, vals in nums.items()]
但商店k
每个子列表内的元组:
a_processed = [[(0.7, 0.2, 99, 99), 0.5], [(0.3, 1.4, 99, 99), 0.2], [(0.6, 0.2, 99, 99), 0.75], [(0.6, 0.4, 99, 99), 0.9], [(1.2, 0.3, 99, 99), 0.6], [(0.2, 1.1, 99, 99), 0.8], [(1.1, 0.5, 99, 99), 0.67]]
所以,我怎么可以概括该行任意数量的元素,而无需显式地写下来每一个?
这与预期的一样,应该有这个想法。谢谢! – Gabriel