2015-10-10 7 views
5

Ho un dizionario come segue:Trova le chiavi per i valori che appaiono più di una volta

mydict ={1:'apple',2:'banana',3:'banana',4:'apple',5:'mango'} 

voglio calcolare un elenco che contiene tutte le chiavi per i valori che compaiono più di una volta:

mylist = [1,2,3,4] 

Il valore 'mango' viene visualizzato solo una volta e pertanto il tasto 5 non è presente in mylist.

Come posso ottenere questo risultato?

+0

Vuoi 'mydict.keys()'? –

+1

Oppure, per ottenere una lista reale in Python 3, 'list (mydict)'? – Ryan

+2

Penso che voglia le chiavi per tutti i valori che appaiono più di una volta. ''mango'' appare solo una volta, e il tasto' 5' non è presente. – TigerhawkT3

risposta

2

Su python 2.7, modo semplice per piccoli dettati. Soluzione migliore, usa collezioni.Counter.

>>> [k for k, v in mydict.items() if mydict.values().count(v) > 1] 
[1, 2, 3, 4] 
+0

L'unico problema è che sta calcolando il "conteggio" per ogni valore ogni volta che lo vede. – TigerhawkT3

+0

Bene, genera l'errore 'AttributeError: 'dict_values' non ha attributo 'count'' su Python 3.5 (questo importa?) –

+0

Beh, usa forse un contatore. Forse questo dovrebbe essere un commento. Funziona bene su python 2.7 – luoluo

6

È possibile utilizzare Counter per fare questo:

>>> from collections import Counter 
>>> c = Counter(mydict.values()) 
>>> [k for k, v in mydict.items() if c[v] > 1] 
[1, 2, 3, 4] 
Problemi correlati