2 votes

Créez une paire clé:valeur dans la première boucle et ajoutez d'autres valeurs dans les boucles suivantes.

Comment puis-je créer une paire clé:valeur dans une première boucle et ensuite simplement ajouter des valeurs dans les boucles suivantes ? Par exemple :

a = [1,2,3]
b = [8,9,10]
c = [4,6,5]

myList= [a,b,c]
positions= ['first_position', 'second_position', 'third_position']

Je voudrais créer un dictionnaire qui enregistre les valeurs de position pour chaque lettre ainsi :

mydict = {'first_position':[1,8,4], 'second_position':[2,9,6], 'third_position':[3,10,5]}

Imaginez qu'au lieu de 3 lettres avec 3 valeurs chacune, j'en ai des millions. Comment pourrais-je faire une boucle à travers chaque lettre et :

  1. Dans la première boucle, créez la paire clé:valeur 'first_position' :[1].
  2. Dans les boucles suivantes, les valeurs sont ajoutées à la clé correspondante : 'first_position' :[1,8,4].

Gracias.

5voto

Shadab Hussain Points 686

Essayez ce code :

mydict = {}
for i in range(len(positions)):
    mydict[positions[i]] = [each[i] for each in myList]

Sortie :

{'first_position': [1, 8, 4],
 'second_position': [2, 9, 6],
 'third_position': [3, 10, 5]}

1voto

manny Points 330

Dictionary.get('key') retournera None si la clé n'existe pas. Vous pouvez donc vérifier si la valeur est None et l'ajouter si elle ne l'est pas.

dict = {}
for list in myList: 
  for position, val in enumerate(list):
    this_position = positions[position]
    if dict.get(this_position) is not None:
      dict[this_position].append(val)
    else:
      dict[this_position] = [val]

1voto

tdelaney Points 7235

Le site zip La fonction itérera les i'èmes valeurs de positions , a , b y c dans l'ordre. Donc,

a = [1,2,3]
b = [8,9,10]
c = [4,6,5]

positions= ['first_position', 'second_position', 'third_position']
sources = [positions, a, b, c]

mydict = {vals[0]:vals[1:] for vals in zip(*sources)}
print(mydict)

Cela crée des tuples, ce qui est généralement bien si les listes sont en lecture seule. Sinon, faites

mydict = {vals[0]:list(vals[1:]) for vals in zip(*sources)}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X