J'ai une liste de 2 listes d'articles, comme indiqué ci-dessous: Et j'essaie de le transformer en dict avec les suivants P> ValueError: too many values to unpack (expected 2)
4 Réponses :
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}
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)
Cela jettera le reste des valeurs, entraînant une perte de données.
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])
Dans l'exemple, il n'est pas défini, quelle serait la valeur si vous voulez garder le premier élément (par exemple code> lorsqu'il y a plus de 2 éléments, tels que:
'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}
Que vous attendez-vous à obtenir en tant que valeur code> pour la ligne
['Joe Mixon', 'RB', 'CIN', '1.11'] code>, 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} code> 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