2017-10-10 2 views
0

je peux créer un dict des listes par enumerate() comme suit:Créer un dict des listes de listes

def turn_to_dict(*args): 
    return {i: v for i, v in enumerate(args)} 


lst1 = [1, 2, 3, 4] 
lst2 = [3, 4, 6, 7] 
lst3 = [5, 8, 9] 


x = turn_to_dict(lst1, lst2, lst3) 

print(x) 

Sortie:

{0: [1, 2, 3, 4], 
1: [3, 4, 6, 7], 
2: [5, 8, 9] 
} 

Je veux la même chose avec un seul changement: I veulent les clés pour être les éléments d'une liste:

lst1 = ['a', 'b', 'c'] 
lst2 = [1, 2, 3, 4] 
lst3 = [3, 4, 6, 7] 
lst4 = [5, 8, 9] 


def turn_to_dict(lst, *args): 
    for k in lst: 
     return {k: v for v in args} 


x = turn_to_dict(lst1, lst2, lst3, lst4) 

print(x) 

Je recevais:

{'a': [5, 8, 9]} 

Ce que je veux est:

{a: [1, 2, 3, 4], 
b: [3, 4, 6, 7], 
c: [5, 8, 9] 
} 

Je reçois pas d'erreur, mais pas la sortie que je pensais que je devrais obtenir.

Répondre

1

Vous devez zip votre liste clé avec les valeurs:

def turn_to_dict(lst, *args): 
    return {k: v for k, v in zip(lst, args)} 

Cette paires les éléments lst avec chacune des listes args.

Non que vous devez utiliser un dictionnaire de compréhension du tout ici, dict() accepte une itérables de paires clé-valeur directement:

return dict(zip(lst, args)) 

Vous auriez seulement besoin d'une compréhension dictionnaire si l'une des expressions key ou value étaient plus qu'une simple référence aux premier et deuxième éléments d'un tuple à deux valeurs.

Démo:

>>> lst1 = ['a', 'b', 'c'] 
>>> lst2 = [1, 2, 3, 4] 
>>> lst3 = [3, 4, 6, 7] 
>>> lst4 = [5, 8, 9] 
>>> args = (lst2, lst3, lst4) 
>>> {k: v for k, v in zip(lst1, args)} 
{'a': [1, 2, 3, 4], 'b': [3, 4, 6, 7], 'c': [5, 8, 9]} 
>>> dict(zip(lst1, args)) 
{'a': [1, 2, 3, 4], 'b': [3, 4, 6, 7], 'c': [5, 8, 9]} 
1

Vous n'avez pas besoin de tout ceci:

dict(zip(lst1, [lst2,lst3, lst4])) 

fonction à l'aide:

def turn_to_dict(lst, *args): 
    return dict(zip(lst, args)) 

Dans:

lst1 = ['a', 'b', 'c'] 
lst2 = [1, 2, 3, 4] 
lst3 = [3, 4, 6, 7] 
lst4 = [5, 8, 9] 

Sortie:

>>> turn_to_dict(lst1,lst2,lst3,lst4) 
{'a': [1, 2, 3, 4], 'c': [5, 8, 9], 'b': [3, 4, 6, 7]}