我有一个python程序,其中有一个类似于以下列表的列表:
a = [[1,2,3], [4,2,7], [5,2,3], [7,8,5]]
在这里,我想使用每个子列表的中间值作为关键字来创建一个字典,该字典应如下所示:
b = {2:[[1,2,3], [4,2,7], [5,2,3]], 8: [[7,8,5]]}
我该如何实现?
答案 0 :(得分:1)
以下是使用字典理解的解决方案:
from itertools import groupby
a = [[1,2,3], [4,2,7], [5,2,3], [7,8,5]]
def get_mid(x):
return x[len(x) // 2]
b = {key: list(val) for key, val in groupby(sorted(a, key=get_mid), get_mid)}
print(b)
答案 1 :(得分:0)
您可以像这样简单地做到这一点:
a = [[1,2,3], [4,2,7], [5,2,3], [7,8,5]]
b = {}
for l in a:
m = l[len(l) // 2] # : get the middle element
if m in b:
b[m].append(l)
else:
b[m] = [l]
print(b)
输出:
{2: [[1, 2, 3], [4, 2, 7], [5, 2, 3]], 8: [[7, 8, 5]]}
您也可以使用defaultdict
来避免循环中的if
:
from collections import defaultdict
b = defaultdict(list)
for l in a:
m = l[len(l) // 2]
b[m].append(l)
print(b)
输出:
defaultdict(<class 'list'>, {2: [[1, 2, 3], [4, 2, 7], [5, 2, 3]], 8: [[7, 8, 5]]})