0
votes

Trop de valeurs pour décompresser (attendu 2) lorsque vous passez de la liste 2D à dicter? (Python)

J'ai une liste de 2 listes d'articles, comme indiqué ci-dessous: XXX PRE>

Et j'essaie de le transformer en dict avec les suivants P>

ValueError: too many values to unpack (expected 2)


3 commentaires

Que vous attendez-vous à obtenir en tant que valeur pour la ligne ['Joe Mixon', 'RB', 'CIN', '1.11'] , par exemple?


Il y a n articles dans chaque rangée. Par conséquent, essayez de choisir un tuple de deux valeurs échoue. potentiellement vous essayez d'atteindre {rangée [0]: ligne [1:] pour la ligne dans list_of_parsed_rows} qui dit le 1er élément de la liste est la clé et le reste de la liste est la valeur.


N'oubliez pas d'accepter une réponse


4 Réponses :


0
votes

Vous vous bougeez sur une liste imbriquée et que la liste intérieure a une longueur variable. Par conséquent, Python ne peut pas déballer de nombreuses valeurs.

En supposant que le premier élément soit la clé et les éléments restants pour être de la valeur, vous devez rejoindre les éléments restants pour former une chaîne P>

dict_of_parsed_rows = {key: value for key,value, *k in list_of_parsed_rows}


0 commentaires

0
votes

Vous ne pouvez pas utiliser la compréhension de la liste pour la dict comme celle-ci. Python ne comprend pas que vous vouliez dire liste [0] code> en tant que clé et liste [1] code> comme valeur. Mais vous pouvez le faire avec une boucle singulaire.

list_of_parsed_rows = [['ADP:', 'Round: 1, Pick: 2'],
 ['Team:', 'Carolina Panthers'],
 ['Ht / Wt:', '5\'11" / 202 lb.'],
 ['College:', 'Stanford'],
 ['Age:', '24'],
 ['Born:', 'June 7, 1996'],
 ['Drafted:', '2017 /\n\nRd. 1 (8)'],
 ['Draft Team:', 'CAR'],
 ['Saquon Barkley', 'RB', 'NYG', '1.02'],
 ['Ezekiel Elliott', 'RB', 'DAL', '1.04'],
 ['Derrick Henry', 'RB', 'TEN', '1.04'],
 ['Dalvin Cook', 'RB', 'MIN', '1.05'],
 ['Alvin Kamara', 'RB', 'NO', '1.06'],
 ['Michael Thomas', 'WR', 'NO', '1.08'],
 ['Josh Jacobs', 'RB', 'LV', '1.08'],
 ['Nick Chubb', 'RB', 'CLE', '1.09'],
 ['Aaron Jones', 'RB', 'GB', '1.10'],
 ['Tyreek Hill', 'WR', 'KC', '1.11'],
 ['Joe Mixon', 'RB', 'CIN', '1.11'],
 ['Pat Mahomes', 'QB', 'KC', '2.01'],
 ['Davante Adams', 'WR', 'GB', '2.01'],
 ['DeAndre Hopkins', 'WR', 'ARI', '2.02'],
 ['Miles Sanders', 'RB', 'PHI', '2.03']]

dict_of_parsed_rows = dict()

for elem in list_of_parsed_rows:
    dict_of_parsed_rows[elem[0]] = elem[1:]

print(dict_of_parsed_rows)


1 commentaires

Cela jettera le reste des valeurs, entraînant une perte de données.



0
votes

Vous pouvez utiliser un filtre dans une compréhension de la liste pour omettre les listes dont 2 éléments:

dict_of_parsed_rows = dict([l for l in list_of_parsed_rows if len(l) == 2])


0 commentaires

0
votes

Dans l'exemple, il n'est pas défini, quelle serait la valeur code> lorsqu'il y a plus de 2 éléments, tels que: xxx pré>

si vous voulez garder le premier élément (par exemple 'SAQUON BARKLEY' code>) comme clé et combinez le reste des valeurs dans une liste code> (par exemple, ['RB', 'NYG', '1.02'] code>) et utiliser comme valeur code> code>, une solution simple serait d'utiliser l'opérateur de décompression ( * code>): p>

dict_of_parsed_rows = {key: value for key, *value in list_of_parsed_rows}


0 commentaires