/ / Zachowaj najmniejsze klucze dla różnych wartości w słowniku Python - python, słownik

Zachowaj najmniejsze klucze dla różnych wartości w słowniku Python - python, słownik

Mam słownik z oddzielnymi kluczami całkowitymi i potencjalnie powielonymi wartościami, na przykład:

my_data = {5:1,2:2,3:2,4:2,1:1}

Wiem, jak uzyskać różne wartości za pomocą set() ale chciałbym wybrać oddzielne wartości za pomocą ich par kluczy, gdzie mały klucz występujący pomiędzy zduplikowanymi wartościami, taki jak ten:

{1:1, 2:2}

Odpowiedzi:

2 dla odpowiedzi № 1

Najpierw klucze grupowe, które mają tę samą wartość w drugim słowniku. Następnie użyj słownika ze zrozumieniem, aby uzyskać minimalny klucz dla wszystkich wartości, które mają zduplikowane klucze.

>>> import collections
>>> my_data = {5:1,2:2,3:2,4:2,1:1}
>>> d = collections.defaultdict(list)
>>> for k, v in my_data.items():
...    d[v].append(k)
>>> {min(keys): value for value, keys in d.items() if len(keys) > 1}
{1: 1, 2: 2}

(Nie jestem pewien co do if len(key) > 1. Jeśli to nie jest to, co masz na myśli "wśród zduplikowanych wartości", po prostu usuń tę część.)


2 dla odpowiedzi nr 2

Sortować pary klucz-wartość dyktujące według wartości, a następnie klawisze (niższe klawisze są na pierwszym miejscu), Grupa je według wartości, a następnie weź pierwszy klucz w każdej grupie, który będzie najniższym kluczem dla tej wartości.

Możesz to zrobić w zrozumienie słownika bez pośredniego słownika:

from itertools import groupby

dct = {5:1, 2:2, 3:2, 4:2, 1:1}
new_dict = dict(next(g) for _, g in groupby(sorted(dct.items(),
key=lambda x: x[::-1]), lambda x: x[1]))
# {1: 1, 2: 2}