2016-05-19 1 views
0

J'essaie d'obtenir une liste de toutes les unités qui sont prédéfinies dans le paquet python. Quelque chose comme ceci:Besoin d'une liste de toutes les unités disponibles en quantités paquet python

from quantities import units as u 

myList = u.length.list(everything defined with UnitLength) 

et le résultat serait:

myList = ['m','meter','metre,'mi','au',...] 

Je veux le faire pour tous les types d'unités qu'ils définissent dans le paquet. Une idée de comment faire cela sans analyser le code source réel?

Répondre

0
from quantities import units 

unit_symbols = [u.symbol for _, u in units.__dict__.items() 
    if isinstance(u, type(units.deg))] 

Vérifiez les documents, peut-être que cette liste est exportée.

+0

Merci, Yakym. C'est exactement ce dont j'avais besoin. Il s'avère que j'ai besoin à la fois des symboles et des noms dans une grande liste donc la suggestion d'Erik Bailey est utile aussi. – thegoodson

0

Je pense que cela fait ce que vous voulez:

from quantities import units as u 

myList = [unit for unit in dir(u.length) 
      if type(getattr(u.length, unit)) is u.UnitLength] 

L'inconvénient est qu'il est pas applicable aux autres types d'unités, que vous avez besoin de connaître le type de chacun.

0

Yakym, bonne réponse. thegoodson, selon que vous voulez ou non les versions abrégées ou non abrégées, utilisez la première (déchargée à _ dans l'exemple de Yakim) pour obtenir la liste non abrégée. Je suppose que d'une manière plus complète (pour obtenir les deux) serait:

from quantities import units as u 

unit_symbols = [foo.symbol for _, foo in u.__dict__.items() if isinstance(foo, type(u.m))] 
unit_names = [bar for bar, foo in u.__dict__.items() if isinstance(foo, type(u.m))] 
+0

Pourquoi avoir des listes séparées pour les noms et les valeurs? pourquoi ne pas juste faire un dict? 'all_units = {bar: foo pour la barre, foo dans u .__ dict __. items() si isinstance (foo, type (u.m))}' –

+0

Encore mieux! Aimer! –