Найти максимальную длину списка внутри другого списка в словаре - PullRequest
0 голосов
/ 01 мая 2018

Мне нужно получить максимальную длину списка ВНУТРИ другого списка, который, в свою очередь, находится внутри словаря.

Допустим, у меня есть:

x={
'a':[[1],[1,2,3],[1],[1]],
'b':[[1],[1,2],[1],[1]],
'c':[[1],[1,2],[1],[1]]
}

Все, что мне нужно, это получить 3 (максимальная длина согласно второму списку «а»).

До сих пор я искал похожие подходы, но я мог найти итерацию только на первом уровне списков, и я просто получил 4 (длина значений «a», «b» и «c»: 4 списка ) это НЕ то, что я ищу.

Пока у меня есть:

x={
'a':[[1],[1,2,3],[1],[1]],
'b':[[1],[1],[1],[1]],
'c':[[1],[1],[1],[1]]
}

maxlist=len(x[[k for k in x.keys() if x[k]==max(x.values(),key=len)][0]])

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

Вам нужно будет сплющить.

>>> counts = [len(b) for a in x.values() for b in a]
[1, 3, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1]

>>> max(counts)
3

Или для оптимальной производительности используйте генератор:

max(len(b) for a in x.values() for b in a)
0 голосов
/ 01 мая 2018

Вы также можете использовать itertools.chain:

from itertools import chain

res = max(map(len, chain.from_iterable(x.values())))

# 3
0 голосов
/ 01 мая 2018

Вы можете игнорировать ключи словаря и вместо этого использовать двойные max:

x = {'a': [[1], [1, 2, 3], [1], [1]], 'c': [[1], [1, 2], [1], [1]], 'b': [[1], [1, 2], [1], [1]]}
result = max(max(map(len, i)) for i in x.values())

Выход:

3
...