es posible diseñar un diccionario en python de forma tal que esté obligado a tener claves únicas y si por error se agrega una clave que ya está en el diccionario se rechaza. gracias¿Cómo puedo forzar a un diccionario en python a que solo tenga claves únicas?
Respuesta
Siempre se puede crear su propio diccionario
class UniqueDict(dict):
def __setitem__(self, key, value):
if key not in self:
dict.__setitem__(self, key, value)
else:
raise KeyError("Key already exists")
Tenga en cuenta que el método '__init__' no es realmente necesario cuando no hace más que llamar al padre' __init__' con los mismos argumentos. –
Wow, no lo sabía gracias ^^ –
Creo que esta es la respuesta correcta, pero no estoy enamorado del nombre de esta clase. Ver mi comentario sobre la pregunta inicial. Tal vez algo como "InsertOnlyDict" o "NoUpdateDict", etc. sería más claro? – BuvinJ
Puede crear un diccionario personalizado derivando de dict
y anulando __setitem__
para rechazar elementos que ya están en el diccionario.
¿me puede dar un ejemplo? No soy tan profesional en python.thx – Hossein
@Hossein: la respuesta de @Jakobs proporciona un ejemplo. –
Sólo echa su dict antes de agregar el elemento
if 'k' not in mydict:
mydict.update(myitem)
Este es el propósito de setdefault:
>>> x = {}
>>> print x.setdefault.__doc__
D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
>>> x.setdefault('a', 5)
5
>>> x
{'a': 5}
>>> x.setdefault('a', 10)
5
>>> x
{'a': 5}
Esto también significa que puede omitir "if" clave "en dict: ... else: ..."
>>> for val in range(10):
... x.setdefault('total', 0)
... x['total']+=val
...
0
0
1
3
6
10
15
21
28
36
>>> x
{'a': 5, 'total': 45}
Esta es una linda respuesta, y de hecho, las claves duplicadas se tragan silenciosamente, ¿es lo mismo que "rechazado"? Ninguna excepción se plantea. –
- 1. ¿Cómo puedo tener un HashMap con claves únicas en java?
- 2. obtienen claves corresponden a un valor en el diccionario de
- 3. equivalente a un diccionario ordenado que permite claves duplicadas
- 4. dividir un diccionario en python en claves y valores
- 5. ¿Enumerar claves en un diccionario?
- 6. ¿Cómo puedo forzar a grep a que solo devuelva archivos e ignore los directorios?
- 7. Clasificar claves del diccionario en python
- 8. Diccionario de Python a CSV
- 9. Diccionario de Python con variables como claves
- 10. crear diccionario con claves duplicadas en python
- 11. cambiar las claves y valores en un diccionario en Python
- 12. ¿Cómo puedo forzar a Powershell a devolver una matriz cuando una llamada solo devuelve un objeto?
- 13. Doctrina y claves únicas compuestas
- 14. ¿Cómo puedo forzar a PHP a usar cadenas para claves de matriz?
- 15. Python: encontrar claves con valores únicos en un diccionario?
- 16. ¿Cómo puedo forzar a un ContextMenu a cerrar (proyecto WPF)?
- 17. ¿Cómo puedo forzar a subversión a enviar un archivo desactualizado?
- 18. inserte o actualice las claves en un diccionario python
- 19. Eliminar ciertas claves de un diccionario en Python
- 20. Python - intersección entre una lista y claves de un diccionario
- 21. Claves únicas en Entity Framework 4
- 22. Traduciendo el diccionario de Python a C++
- 23. ¿Cómo puedo acceder a un diccionario compartido con multiprocesamiento?
- 24. ¿Cómo puedo combinar diccionarios con las mismas claves en python?
- 25. python: ¿claves de unión de diccionario múltiple?
- 26. ¿hay un iterador entre las claves únicas en std :: multimap?
- 27. Diccionario con claves en Unicode
- 28. ¿Puedo forzar que un documento HTML tenga una página de largo?
- 29. ¿Agregar diccionario a un diccionario?
- 30. Python 3.2: Cómo pasar un diccionario a str.format()
Me gustaría señalar que las "claves únicas" son propiedad inherente de un diccionario. Cuando inserta un par de clave/valor, actualiza las entradas anteriores que darían lugar a claves duplicadas. Tu pregunta, por lo tanto, arrojó mi racha. Ahora, mientras leo esto más de cerca, entiendo que lo que está pidiendo es evitar tales actualizaciones, que es una extensión válida y comprensible. Solo quería aclarar esto para otros lectores, para que no se confundan al pensar que deben evitar duplicar claves en un sentido más general. – BuvinJ
^Sí y como vemos en la respuesta del usuario2197172 a continuación, el uso de 'setdefault' es el complemento: se traga en voz baja los intentos de agregar claves duplicadas. –