2010-03-09 12 views
27

Mientras que otras preguntas han abordado la categoría más amplia de sequences y modules, hago esta pregunta muy específica:Python convenciones de nomenclatura para Diccionarios/Mapas/hashes

"¿Qué convención de nomenclatura Cómo se utiliza para los diccionarios y por qué?"

Algunas muestras convención de nombres que he estado considerando:

# 'value' is the data type stored in the map, while 'key' is the type of key 
value_for_key={key1:value1, key2,value2} 
value_key={key1:value1, key2,value2} 
v_value_k_key={key1:value1, key2,value2} 

no se molestan en contestar el 'por qué' con "porque mi trabajo me dice que", no es muy útil. El motivo por el que se impulsa la elección es más importante. ¿Existen otras consideraciones útiles para una convención de nombres de diccionarios además de la legibilidad?

EDIT:

respuesta elegida: value_key_map

Motivo de la respuesta elegida: Permite que un revisor de código para calcular rápida y fácilmente la clave y el valor de un mapa, y el hecho de que es un mapa sin mirar a ningún otro lado.

+3

En mi humilde opinión, muchas personas con algunos antecedentes matemáticos pueden encontrar 'value_key_map' bastante confuso, ya que puede sugerir que el diccionario asigna valores a las claves (es decir, un diccionario invertido) que obviamente no está destinado. – Loax

+1

En el lenguaje de Python, 'dict' es el término correcto para usar. ('map' es una función https://docs.python.org/3/library/functions.html#map.) Sería mejor nombrar como' key_value_dict', así que por ejemplo 'id_user_dict' tiene' id' como la clave y 'usuario' como el valor. – arun

Respuesta

4

Nunca parezco nombrarles nada como lo que propones (es decir, manteniendo un camino). Simplemente parece ser mucho más claro cuando puedo encontrar un "nombre propio" para el hash. Puede ser "detalles_de_personas" o "tamaños de archivos" o "pistas de álbumes", etc. (aunque los últimos 2 parecen tener nombres de valores_claves, primero un poco menos). En casos excepcionales, será key_value_map o value_key_map si es importante que se trate de un mapa.

Nunca asumiría ningún esquema de nombres para eso. A veces los valores son lo que buscas, a veces las claves. Mi preferencia es "un nombre natural".

+2

+1 value_key_map va directo al grano y es muy legible. – pokstad

+1

¿Por qué no key_value_map? Es más natural, solo busque "key_value_map" y "value_key_map" (con comillas) en google. – DSblizzard

+0

@DSblizzard Honestamente, creo que fue simplemente accidental porque vi a @pokstad enumerando el valor en la primera posición en sus propuestas, un poco de sugerencia subconsciente. 'key_value_map' es probablemente lo que usaría también en mi código. – viraptor

2

Normalmente uso < algo>map ya que generalmente es un mapa como cadenas de funciones, o números para clases, o lo que sea. Los dictados sin nombre por lo general terminan en una estructura más grande, por lo que no me preocupo por ellos.

+1

+1 Me gusta esta convención de nombres porque hace que se sepa muy rápidamente que se trata de un diccionario y no de una lista. Lo único que no me gusta es que todo el mapa de palabras parece exagerado, ¿hay algún estándar popular que logre esto con algún tipo de abreviatura de 'mapa'? ¿Hay alguna forma pitonica para recordar al revisor de código que el objeto es un mapa? – pokstad

3

Creo que tiene sentido nombrar el dict después de los valores en el diccionario, y omitir cualquier mención de la clave. Después de todo, vas a utilizar el dict en situaciones como values[key] que deja perfectamente claro cuáles son las claves, suponiendo que hayas llamado key.

+0

Ese fue mi primer instinto, pero siento que la convención de nomenclatura entre mis listas y mis diccionarios es muy similar. Cuando vuelvo a revisar el código anterior, tengo que encontrar constantemente donde algo se inicializa o se accede por clave para que sepa que mi diccionario no es una lista o viceversa. – pokstad

+1

@pokstad: Sí, veo lo que dices. Sin embargo, si nos fijamos en la biblioteca estándar, sus dicts parecen ser nombrados después de 'values'only, nunca más wordy' values_key_map'. Por ejemplo, 'sys.modules', o' locals() '. Esa parece ser la forma en que, al menos, los desarrolladores piensan que es lo mejor. Tal vez un poco de documentación podría ayudar también. – unutbu

+1

+1 Gracias por la referencia concreta. – pokstad

9

key_to_value, por ejemplo surname_to_salary puede ser útil cuando hay mapas estrechamente interrelacionados en código: A a B, B a A, C a B, etc.

+1

Este es mi enfoque también. La convención de nomenclatura * _to_ * indica rápidamente que es un dict, por lo que no es necesario * _map. También da un buen cálculo para leer. 'apple = naranges_to_apples [my_orange]'. –

+0

Recientemente me encontré con una pregunta similar para C# donde [una respuesta] (http://stackoverflow.com/a/4330705/945456) sugirió 'values_by_key' que parece ser otra buena opción. –

0

En nuestros proyectos, hemos adoptado siguiente convención:

  • key_to_value_map cuando es un mapa
  • aname_dict para mayor estructura más compleja.
Cuestiones relacionadas