Agregue una tupla de 2 valores para dictar como clave: valor

Tengo una tupla, como ('key1', 'value1') que quiero agregar eso a un diccionario para que sea como {'key1': 'value1'} pero no hacer algo como dictionary[t[0]] = t[1].

El contexto es el siguiente, tengo una regla de recurrencia que se ve así:

FREQ=WEEKLY;UNTIL=20120620T233000Z;INTERVAL=2;BYDAY=WE,TH

Y quiero tener un dict como:

recurrence = {
    'freq' : 'weekly',
    'until' : '20120620T233000Z',
    'interval' : '2',
    'byday' : 'we,th'
}

Y estoy haciendo algo como esto:

for rule in recurrence.split(';'):
    r = rule.split('=')
    rules[r[0]] = r[1]

Y no me gusta nada. ¿Hay una forma más pitónica de hacerlo?

preguntado el 12 de junio de 12 a las 17:06

3 Respuestas

Usa una comprensión:

rules.update(rule.split('=', 1) for rule in recurrence.split(';'))

Esto es si el dictado rules ya existe; de lo contrario usar

rules = dict(rule.split('=', 1) for rule in recurrence.split(';'))

Esto funciona porque el dict constructor y dict.update ambos aceptan un iterador que produce pares clave/valor.

Respondido el 12 de junio de 12 a las 17:06

.partition('=')[::2] si falta '=' es válido/puede ignorarse - jfs

Este comentario es lo que me encanta de SO. Estaba buscando una forma limpia de evitar el "ValueError: el elemento de secuencia de actualización del diccionario n. ° 2 tiene una longitud de 1; se requiere 2" al desempaquetar una cadena que tenía valores faltantes como este: 'user_id="123",access_token="XXXXXX ",marca de tiempo'. Este comentario fue un momento de "ah-ha" que me ha enseñado algo muy valioso. - mateo purdon

Usa la comprensión del diccionario:

>>> strs="FREQ=WEEKLY;UNTIL=20120620T233000Z;INTERVAL=2;BYDAY=WE,TH"
>>> dic={key: value for key, value in (rule.split("=") for rule in strs.split(";"))}
>>> print(dic)

{'BYDAY': 'WE,TH', 'FREQ': 'WEEKLY', 'INTERVAL': '2', 'UNTIL': '20120620T233000Z'}

Respondido el 12 de junio de 12 a las 17:06

La dict La función transformará su tupla de tuplas en una clave: diccionario de valores. Qué tal esto,

t=((1,2),(3,4))
dict(t)
{1:2,3:4}

Respondido el 12 de junio de 12 a las 22:06

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