2017-06-20 1 views
1

J'ai un dictionnaire contenant des intervalles de temps de plusieurs objets, à savoir un tableau 2D avec le temps dans l'axe x et l'objet dans le y. J'ai aussi le même dictionnaire de forme pour les valeurs de flux stellaires pour aller avec ces temps et enfin j'ai un dictionnaire contenant les ID Stellar qui est un tableau 1D de chaînes.Suppression d'éléments de dictionnaires tout en conservant la forme

En plus de cela, il y a un dictionnaire avec les valeurs 'FLAG' où si dic['FLAG'] != 0 alors les valeurs de flux et de temps correspondantes doivent être rejetées. L'utilisation de time_new = (dic['time'][np.where(dic['FLAG'] == 0.)]) semble passer par le dictionnaire temporel 2D ajoutant chaque valeur acceptée à la fin de la suivante plutôt que de supprimer simplement les valeurs qui ne conviennent pas et de supprimer la forme globale du tableau 2D.

Quelqu'un a-t-il des suggestions pour résoudre un tel problème? Merci beaucoup!

+0

Utilisez un 'np.ma.MaskedArray' puis définissez l'attribut' '.mask' à dic [ 'FLAG' ] == 0.' – MSeifert

+0

merci pour la réponse! donc quelque chose comme new_time = np.ma.MaskedArray (time, mask = dic ['FLAG'] == 0.)? – user8188120

+0

Oui, au moins si toutes les opérations ultérieures supportent les tableaux masqués :) – MSeifert

Répondre

1

Je ne sais pas exactement ce que vous voulez dire, alors je vais vous donner quelques réponses/conseils possibles.

#The dictionary 
A = {"a" : 1, "b" : 2} 

#N1 
A.popitem() 

#N2 
A.pop("a") 

#N3 
List = list(A.keys()) 
A.pop(List[(len(List) - 1)]) 

J'espère que vous pouvez prendre quelque chose d'utile à partir de cela.

1

La façon simple:

import copy 
A = {'obj1':{'value':1,'time':{'FLAG':0}}, 
'obj2':{'value':1,'time':{'FLAG':1}}, 
'obj3':{'value':1,'time':{'FLAG':0}}, 
} 
B = copy.deepcopy(A) 
objs = B.keys() 
for obj in objs : 
    if B[obj]['time']['FLAG']==0: 
     del B[obj] 
print B 

Le résultat est:

{'obj2': {'value': 1, 'time': {'FLAG': 1}}} 
+0

Okay I voyez ce que vous faites là, peut-être que ma compréhension des dicts n'est pas à la hauteur mais mes dictionnaires de temps et de drapeaux sont séparés les uns des autres mais pour chaque objet enregistré, une valeur de drapeau est enregistrée dans le dictionnaire FLAGS. Donc j'interrogerais le dict FLAGS pour des valeurs non nulles et retirerais leurs valeurs équivalentes de coordonnées du dictionnaire temporel si cela avait du sens? – user8188120

+0

@ user8188120 Oui, vous avez 2 dict. Vous pouvez toujours utiliser del pour supprimer certains éléments de votre dict. Mais je pense qu'il est préférable d'utiliser des pandas au lieu de dict. –

+0

Ok merci :) Je pense que je dois lire un peu plus dans les dictionnaires mais je vais essayer de comprendre le code que vous avez ajouté ci-dessus – user8188120