Quiero cambiar la clave de una entrada en un diccionario de Python.

Hay una manera sencilla de hacer esto?

InformationsquelleAutor user469652 | 2010-12-10

12 Comentarios

  1. 586

    Fácil de hacer en 2 pasos:

    dictionary[new_key] = dictionary[old_key]
    del dictionary[old_key]

    O en 1 paso:

    dictionary[new_key] = dictionary.pop(old_key)

    que aumentará KeyError si dictionary[old_key] es indefinido. Tenga en cuenta que este se eliminar dictionary[old_key].

    >>> dictionary = { 1: 'one', 2:'two', 3:'three' }
    >>> dictionary['ONE'] = dictionary.pop(1)
    >>> dictionary
    {2: 'two', 3: 'three', 'ONE': 'one'}
    >>> dictionary['ONE'] = dictionary.pop(1)
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    KeyError: 1
    • Esto aumentará un KeyError de cualquier manera, si la clave es no existente, pero se puede usar dict[new_value] = dict.pop(old_value, some_default_value) para evitar que
  2. 52

    si quieres cambiar todas las claves:

    d = {'x':1, 'y':2, 'z':3}
    d1 = {'x':'a', 'y':'b', 'z':'c'}
    
    In [10]: dict((d1[key], value) for (key, value) in d.items())
    Out[10]: {'a': 1, 'b': 2, 'c': 3}

    si quieres cambiar de clave única:
    Usted puede ir con cualquiera de las anteriores sugerencia.

    • Esto crea un nuevo diccionario, en lugar de la actualización de la existente-que puede no ser importante, pero no es lo que se le pidió.
    • Misma respuesta con un diccionario de comprensión: { d1[key] : value for key, value in d.items() }
  3. 29

    pop n»fresh

    >>>a = {1:2, 3:4}
    >>>a[5] = a.pop(1)
    >>>a
    {3: 4, 5: 2}
    >>> 
    • corto n»sweet… agradable.
  4. 22

    En python 2.7 y superior, puede utilizar el diccionario de la comprensión:
    Este es un ejemplo que me encontré mientras que la lectura de un archivo CSV utilizando un DictReader. El usuario se habían seguido todos los nombres de columna con ‘:’

    {'key1:' :1, 'key2:' : 2, 'key3:' : 3}

    para deshacerse de la final ‘:’ en las claves:

    corrected_dict = { k.replace(':', ''): v for k, v in ori_dict.items() }

    • «AttributeError: ‘dict’ el objeto no tiene ningún atributo ‘reemplazar'»
    • user1318125, yo sugeriría tratando de copiar y pegar. Esto funciona para mí en la consola de python (el .reemplace está siendo ejecutado en la cadena que se utiliza como clave)
  5. 7

    Ya que las teclas son lo que los diccionarios de uso para la búsqueda de valores, realmente no se puede cambiar. La cosa más cercana que puede hacer es guardar el valor asociado con la clave antigua, eliminar, a continuación, añadir una nueva entrada con la llave de repuesto y el valor guardado. Varias de las otras respuestas ilustrar las diferentes maneras en que esto puede lograrse.

  6. 5

    Si usted tiene un complejo dict, significa que hay un diccionario o lista dentro de la dict:

    myDict = {1:"one",2:{3:"three",4:"four"}}
    myDict[2][5] = myDict[2].pop(4)
    print myDict
    
    Output
    {1: 'one', 2: {3: 'three', 5: 'four'}}
  7. 4

    Para convertir todas las claves en el diccionario

    Supongamos que este es su diccionario:

    >>> sample = {'person-id': '3', 'person-name': 'Bob'}

    Para convertir todos los guiones guiones bajos en la muestra diccionario clave:

    >>> sample = {key.replace('-', '_'): sample.pop(key) for key in sample.keys()}
    >>> sample
    >>> {'person_id': '3', 'person_name': 'Bob'}
  8. 3

    Ninguna forma directa de hacer esto, pero usted puede eliminar, a continuación, asignar

    d = {1:2,3:4}
    
    d[newKey] = d[1]
    del d[1]

    o hacer la masa de los cambios claves:

    d = dict((changeKey(k), v) for k, v in d.items())
    • d = { changeKey(k): v for k, v in d.items()}
  9. 1
    d = {1:2,3:4}

    supongamos que queremos cambiar las claves de los elementos de la lista p=[‘a’ , ‘b’].
    el siguiente código va a hacer:

    d=dict(zip(p,list(d.values()))) 

    y tenemos

    {'a': 2, 'b': 4}
  10. 0

    Puede asociar el mismo valor con muchas teclas, o simplemente eliminar una clave y volver a agregar una nueva clave con el mismo valor.

    Por ejemplo, si usted tiene las llaves->valores:

    red->1
    blue->2
    green->4

    no hay ninguna razón usted no puede agregar purple->2 o quitar red->1 y agregar orange->1

  11. 0

    En caso de cambio de todas las teclas a la vez.
    Aquí estoy derivados de las teclas.

    a = {'making' : 1, 'jumping' : 2, 'climbing' : 1, 'running' : 2}
    b = {ps.stem(w) : a[w] for w in a.keys()}
    print(b)
    >>> {'climb': 1, 'jump': 2, 'make': 1, 'run': 2} #output
  12. -3

    No he visto esta respuesta exacta:

    dict['key'] = value

    Usted puede hacer esto a los atributos de los objetos.
    Hacer de ellos un diccionario por hacer esto:

    dict = vars(obj)

    Entonces usted puede manipular los atributos del objeto como lo haría un diccionario:

    dict['attribute'] = value
    • Yo no estoy viendo cómo esto se relaciona con la pregunta; ¿podría usted por favor elaborado?

Dejar respuesta

Please enter your comment!
Please enter your name here