вы можете использовать sort
в соответствии с длиной списка и использовать словарь, чтобы последний записанный ключ "выиграл".
Затем преобразовать обратно в tuple
или list
или ..оставить как dict
:
val = [(200, []), (300, [500, 200]), (400, [100, 200, 300]), (400, [])]
def largest_val_arrangement(val):
return tuple({k:v for k,v in sorted(val, key = lambda t : len(t[1]))}.items())
largest_val_arrangement(val)
результат:
((200, []), (400, [100, 200, 300]), (300, [500, 200]))
Этот метод, подобно используемому sort
, имеет сложность O(log(n)*n)
, (dict
имеет O(1)
средняя сложность).
Но однострочники не всегда являются наиболее эффективными решениями.Здесь использование sort
не нужно, когда старый добрый цикл с маркером dict работает в O(n)
:
def largest_val_arrangement(val):
d = dict()
for k,v in val:
if k not in d or len(d[k]) < len(v):
d[k] = v
return tuple(d.items())