structure.unpack va déballer les données dans un tuple. Y a-t-il un équivalent qui stockera des données dans une dicte à la place? P>
Dans mon problème particulier, je traite un format binaire de largeur fixe. Je veux pouvoir être capable, en une fois tombé, de décompresser et de stocker les valeurs dans une dict (actuellement, je traverse manuellement la liste et assigner des valeurs dictoires) p>
3 Réponses :
Voulez-vous quelque chose comme ça?
C'est ce que je fais maintenant. J'espérais quelque chose d'un peu slicker
C'est une liste qui se fait traverser (sauf si ZIP ne fait que quelque chose d'intelligent qui ne nécessite pas de marcher dans la liste).
Je sens que cette solution va bien, et déjà slicker que de mucking avec collections.NamedTupple code>
Tout comme un de côté, cette méthode est beaucoup b> plus rapide que la version TUPLE nommée
Si vous êtes sur 2,6 ou plus récent, vous pouvez utiliser NamedTuple + STRUCT.PACK / DEPACK THIS THIS:
import collections import struct Point = collections.namedtuple("Point", "x y z") data = Point(x=1, y=2, z=3) packed_data = struct.pack("hhh", *data) data = Point(*struct.unpack("hhh", packed_data)) print data.x, data.y, data.z
the si cela compte, notez que dans Python 2.7 struct code> documentation affiche un exemple < / a> de déballage directement dans un
nomméTuple code>. Vous pouvez le combiner avec
namedTuple._asdict () code> pour obtenir votre caillon Swell:
_Asdict () Code> renvoie un
ordonnéDict code> ... p> p>
Heh devrait probablement avoir vérifié le document Web. Aucune indication de cela dans le python aide (STRIT) code>
réponse intéressante. Je vois que c'est une fonction générée de manière dynamique, mais pourquoi: _Asdict () avec un soulignement préparé?
Utilisation de méthodes privées - bonne idée.
@FogleBird - Je ne sais pas ce que vous entendez par des méthodes privées. NamedTUPLE._ASDICT () CODE> est documenté ici: Python.org/doc//Currrent/Library/... . Et j'ai pris l'utilisation de
namedTuple._make () code> directement à partir de la documentation liée à la réponse. Quelle est la meilleure pratique recommandée ici?
Les espaces après Raymond me rendent fou de déboguer le code.
Pourquoi le code ne peut pas exécuter sous Python3: TypeError: 'str' ne prend pas en charge l'interface tampon code>?
Vous pouvez réécrire la cinquième ligne plus concis en tant qu'étudiant (* structure.unpack ('<10shhb', enregistrement))) ._ asdict () code>
Cette solution est significativement plus lente que dict (zip (touches, structure.unpack (...))) code>
Je ne le pense pas. Mais le constructeur
dict code> peut prendre une liste ou un itérateur de paires (nom, valeur) pour initialiser avec. Cela pourrait vous aider.
Vous pouvez également être intéressé par
NamedTuple code> si vous n'avez pas besoin de modifier l'objet après la création.
Que pensez-vous que les clés soient?