Agregue una tupla de 2 valores para dictar como clave: valor
Frecuentes
Visto 11,632 veces
8
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?
3 Respuestas
6
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
1
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
1
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 python or haz tu propia pregunta.
.partition('=')[::2]
si falta '=' es válido/puede ignorarse - jfsEste 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