Cómo crear un diccionario nested en Python con 3 listas

Supongamos que he creado 3 listas y quiero crear un diccionario para ello. p.ej

a= ['A', 'B', 'C', 'D'] b =[1, 2, 3, 4] c = [9, 8, 7, 6] 

Ahora lo que quiero es crear un diccionario como este:

 {'A':{'1' :'9'} , 'B':{'2':'8'}, 'C':{'3':'7'} , 'D':{'4':'6'}} 

¿Es posible, alguien puede ayudarme en esto?

Puede crear el diccionario a partir de listas en zip y convertir los valores de int en cadenas, si entendí su pregunta correctamente

 dct = {x: {str(y): str(z)} for x, y, z in zip(a,b,c)} 

Salida:

 {'A': {'1': '9'}, 'C': {'3': '7'}, 'B': {'2': '8'}, 'D': {'4': '6'}} 
 a = ['A', 'B', 'C', 'D'] # don't forget the quotation marks b = [1, 2, 3, 4] c = [9, 8, 7, 6] res = dict() for i, index_a in enumerate(a): res[index_a] = {str(b[i]): c[i]} 

Edición : alternativamente con una lista de comprensión (principalmente para los votantes de aquí, ya que es python avanzado y más difícil de entender):

 res = dict((a[i], {str(b[i]): c[i]}) for i in range(len(a))) 

También puedes usar map() aquí:

 a = ['A', 'B', 'C', 'D'] b = [1, 2, 3, 4] c = [9, 8, 7, 6] dct = dict(map(lambda x, y, z : (x, {str(y): str(z)}), a, b, c)) print(dct) 

Qué salidas:

 {'A': {'1': '9'}, 'B': {'2': '8'}, 'C': {'3': '7'}, 'D': {'4': '6'}} 

Puedes probar esto:

 a= ['A', 'B', 'C', 'D'] b =[1, 2, 3, 4] c = [9, 8, 7, 6] new_data = dict([[a, dict([map(str, i)])] for a, i in zip(a, zip(b, c))]) 

Salida:

 {'A': {'1': '9'}, 'C': {'3': '7'}, 'B': {'2': '8'}, 'D': {'4': '6'}} 

O

 new_data = dict(zip(a, map(lambda x:dict([x]), zip(map(str, b), map(str, c))))) 

Suponiendo que lo que desea es tener a clave en el diccionario externo, b y c la clave y el elemento de valor de los dictados internos:

 d = {k: {x: y} for k, x, y in zip(a, b, c)} 

Actualización: Sin embargo, en su ejemplo, y son cadenas, así que si eso es lo que quiere:

 d = {k: {str(x): str(y)} for k, x, y in zip(a, b, c)} 
 { a[x]: {b[x]: c[x]} for x in range(len(a))} 

o si realmente lo dices:

 { a[x]: {str(b[x]): str(c[x])} for x in range(len(a))} 

Estás buscando algo como esto ?

 a= ['A', 'B', 'C', 'D'] b =[1, 2, 3, 4] c = [9, 8, 7, 6] new_dict={} set(map(lambda x,y,z:(new_dict.__setitem__(x,{y,z})),a,b,c)) print(new_dict) 

salida:

 {'D': {4, 6}, 'A': {9, 1}, 'B': {8, 2}, 'C': {3, 7}}