¿El append () de Python solo permite elementos únicos en una lista?

La documentación de Python implica que pueden existir elementos duplicados dentro de una lista, y esto está respaldado por la asignación: lista = ["palabra1", "palabra1"]. Sin embargo, el append() de Python no parece agregar un elemento si ya está en la lista. ¿Me estoy perdiendo algo aquí o es un intento deliberado de un comportamiento similar a set ()?

>> d = {}
>> d["word1"] = 1
>> d["word2"] = 2
>> d["word2"] = 3

>> vocab = []
>> for word,freq in d.iteritems():
>> ...  vocab.append(word)

>> for item in vocab:
>> ...  print item

devoluciones:

word1 
word2

¿Dónde está la segunda palabra2?

preguntado el 22 de mayo de 12 a las 20:05

Es útil si no incluye el >> y ... - esto dificulta que otros trabajen con su código. -

Lo siento, en realidad agregué eso manualmente después de copiar mi código desde el bloc de notas ++, ya que vi que algunas personas lo hacen aquí para distinguir entre el código y la salida. Pensé que ayudaría; ¡pero no lo volveré a hacer ya que haces un buen punto! -

Es posible que desee un planificadas de tuplas en lugar de un diccionario. Esto permitiría ("word2", 2) una sola vez, no importa cuántas veces lo agregue, pero también permitirá ("word2", 3) al mismo tiempo. -

La gente no inserta >>> y ... ellos mismos. Eso viene del intérprete interactivo de python. Debería usarlo también: ayuda a responder preguntas como esta. Aquí hay un versión en línea, y aquí está cómo ponerlo en marcha en su propia computadora. -

@ Steve314 Hay implementaciones multidict por ahí. Probablemente sea más fácil usarlos en lugar de incrustar tales operaciones en su código como operaciones en conjuntos. -

7 Respuestas

Aún así, is sin segunda palabra 2.

>>> d = {}
>>> d["word1"] = 1
>>> d["word2"] = 2
>>> d
{'word1': 1, 'word2': 2}
>>> d["word2"] = 3
>>> d
{'word1': 1, 'word2': 3}

Los diccionarios asignan una clave específica a un valor específico. Si desea que una sola clave se corresponda con varios valores, generalmente se usa una lista y un dictado predeterminado es muy útil:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d["word1"].append(1)
>>> d["word2"].append(2)
>>> d["word2"].append(3)
>>> d
defaultdict(<type 'list'>, {'word1': [1], 'word2': [2, 3]})

contestado el 22 de mayo de 12 a las 20:05

OIA, un diccionario es un mapa, no un multimapa. - usuario180247

Estás poniendo las palabras en un diccionario primero. Los diccionarios no aceptan duplicados, por lo que cuando ingresa la misma clave en el diccionario dos veces, la segunda entrada sobrescribe la primera. Luego, cuando itera sobre las claves en el diccionario, no obtiene duplicados.

>>> d = {}
>>> d['word1'] = 1
>>> d['word2'] = 2
>>> d['word2'] = 3
>>> print d
{'word1': 1, 'word2': 3}

Iterar sobre una lista con duplicados funciona como cabría esperar:

>>> words = ['word1', 'word2', 'word2']
>>> newlist = []
>>> for word in words:
...     newlist.append(word)
... 
>>> newlist
['word1', 'word2', 'word2']

contestado el 22 de mayo de 12 a las 20:05

no hay segundo "word2", porque dictSólo tienen una entrada por tecla. Este es el comportamiento habitual de un mapa con respaldo de tabla hash.

Tenga en cuenta que si solo desea las llaves de un dict utilizado dict.keys().

contestado el 22 de mayo de 12 a las 20:05

Nunca estuvo allí (a menos que su ejemplo sea incorrecto). dict lo sobrescribió:

In [5]: d
Out[5]: {'word1': 1, 'word2': 3}

El segundo word2 sobrescribió el primero. dict Las claves deben ser únicas.

contestado el 22 de mayo de 12 a las 20:05

El problema aquí no es con append(), es que no puedes tener claves duplicadas en un diccionario, todas deben ser únicas.

Esto significa que la línea d["word2"] = 3 no está agregando un adicional "word2" clave, está sobrescribiendo el valor actual de d["word2"].

contestado el 22 de mayo de 12 a las 20:05

El diccionario asigna claves duplicadas y sobrescribe la entrada más antigua por la última entrada ingresada.

>>> d = {}
>>> d["word1"] = 1
>>> d
{'word1': 1}
>>> d["word2"] = 2
>>> d
{'word1': 1, 'word2': 2}
>>> d["word2"] = 3
>>> d
{'word1': 1, 'word2': 3}

contestado el 22 de mayo de 12 a las 20:05

Debido a que d es un diccionario, una clave puede tener solo un valor, por lo que cuando modifica d["word2"] = 2 y entonces d["word2"] = 3, está sobrescribiendo el valor 2 con 3.

>> d = {}
>> d["word1"] = 1
>> d["word2"] = 2
>> d["word2"] = 3

#the fourth line `d["word2"] = 3` only modifies the value of d["word2"].

>> print(d)
{'word1': 1, 'word2': 3}

Respondido 16 Jul 12, 16:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.