制作特殊的字典

时间:2019-06-08 21:51:59

标签: python-3.x list dictionary list-comprehension python-3.6

我有一个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]]}

我该如何实现?

2 个答案:

答案 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]]})