0

Compte tenu du dictionnaire suivant:Débarrassez-vous de symbole L (long datatype) dans la compréhension dict

d={98558: [283L, 211L, 44L, 0L], 
    98559: [283L, 212L, 44L, 1L], 
    98560: [283L, 213L, 44L, 2L]} 

Je veux se débarrasser du symbole L en utilisant la compréhension dict. Mes deux solutions ne fonctionnent pas:

  1. dmap={k: map(int, v[i]) for v in d.values() for i in v}
  2. dmap={k: int(v[i]) for v in d.values() for i in v}

Ils ont tous deux le retour: IndexError: list index out of range, en disant que i=7L. Qu'est-ce que je fais mal?

+2

Le "L" est ne fait pas partie des données. Python imprime juste cela lors de l'affichage d'une valeur longue afin que vous puissiez voir que c'est une valeur longue. En interne, la valeur est juste '7'. Quand vous dites "se débarrasser du L", demandez-vous vraiment comment convertir chaque long en un int? Y a-t-il une raison pour laquelle vous ne pouvez pas utiliser les valeurs longues? –

Répondre

1

Le problème est que, dans votre compréhension i est un élément de v et même si v[i] réussit, v[i] est un numéro, pas une liste, de sorte que votre première requête ne peut pas effectuer une map. En outre k n'est pas défini (d'où vient-il?).

Dans la deuxième requête, vous associez un int à une clé, mais k n'est quand même pas défini.

Vous pouvez facilement le résoudre comme:

dmap = { k: map(int,v) for k,v in d.iteritems() }

Ou vous pouvez écrire la compréhension de la liste vous, comme:

dmap = { k: [int(vi) for vi in v] for k,v in d.iteritems() }
+0

Donc, de cette façon, vous prenez essentiellement chaque liste comme un élément qui lui est propre et vous appliquez le mappage 'int' dans son intégralité? Je pensais qu'il fallait appliquer l'opérateur 'int' à tous les éléments individuellement, et avec les éléments je veux dire les nombres mêmes. – FaCoffee

+0

@FaCoffee: c'est ce que fait une 'map': elle ** mappe ** une liste de' x's à 'f (x)' s. –

+0

Le 'k' était la clé dict dans mon esprit tordu ahah. – FaCoffee