-1
votes

Comment peut-on changer la valeur et la clé d'un dictionnaire imbriqué à Python?

J'écris un algorithme d'acceptation différé pour les médecins et les hôpitaux, mais avant d'y arriver, j'ai besoin de mes dictionnaires à présenter de manière correcte.

Actuellement, j'ai un dictionnaire de médecins contenant un dictionnaire imbriqué avec leur classement de leur classement de HÔPITAUX: P>

{'Doctor_7': {'Hospital_6': 4.0, 'Hospital_3': 8.0, 'Hospital_1': 10.0, 'Hospital_8': 1.0, 'Hospital_2': 9.0, 'Hospital_10': 5.5, 'Hospital_5': 5.5, 'Hospital_7': 2.0, 'Hospital_4': 7.0, 'Hospital_9': 3.0}


3 commentaires

Astuce: compréhension du dictionnaire. Astuce 2: Les dictionnaires ordinaires ne peuvent pas être triés.


Comment faites-vous face au fait qu'un médecin peut donner la même note à plusieurs hôpitaux?


Le classement en double est définitivement un problème que je vais examiner. De préférence, les hôpitaux ne doivent pas être abandonnés.


3 Réponses :


1
votes
{'Doctor_7': OrderedDict([(1.0, 'Hospital_8'),
              (2.0, 'Hospital_7'),
              (3.0, 'Hospital_9'),
              (4.0, 'Hospital_6'),
              (5.5, 'Hospital_5'),
              (7.0, 'Hospital_4'),
              (8.0, 'Hospital_3'),
              (9.0, 'Hospital_2'),
              (10.0, 'Hospital_1')])}

2 commentaires

Cela goutte silencieusement les hôpitaux avec la même note (Hospital_10 et Hospital_5). Et lequel est conservé n'est même pas la même chose entre les sous-versions de Python.


Merci pour votre réponse FHTMITCHELL! Je vais regarder dans le problème des hôpitaux abandonnés.



1
votes

Vous pouvez utiliser l'utilisateur compréhension dict pour y parvenir:

{'Doctor_7': {4.0: 'Hospital_6',
  8.0: 'Hospital_3',
  10.0: 'Hospital_1',
  1.0: 'Hospital_8',
  9.0: 'Hospital_2',
  5.5: 'Hospital_5',
  2.0: 'Hospital_7',
  7.0: 'Hospital_4',
  3.0: 'Hospital_9'}}


1 commentaires

Merci pour votre réponse rajan! Je vais également examiner votre lien sur la compréhension du dictionnaire. Très appréciée!



0
votes

Depuis les deux solutions jusqu'à présent, la négligence prenant soin des touches en double (la même note donnée à plusieurs hôpitaux), une solution qui fait.

Il a l'inconvénient que chaque évaluation pointe sur une liste d'hôpitaux avec cette note, au lieu du nom directement, même si cette liste a une longueur d'une. p> xxx pré>


mais depuis que vous avez mentionné un fichier de données, s'il s'agit d'un pandas.dataframe code> qui ressemblait à ceci: p> xxx pré>

Vous pouvez faire quelque chose comme ceci: P>

df.apply(lambda col: col.reset_index()\
                        .groupby(col.name)["index"]\
                        .apply(lambda x: x.tolist()))
#                        Doctor_1                   Doctor_7
# 1.0                [Hospital_1]               [Hospital_8]
# 2.0                         NaN               [Hospital_7]
# 3.0    [Hospital_2, Hospital_9]               [Hospital_9]
# 4.0    [Hospital_6, Hospital_7]               [Hospital_6]
# 5.5                         NaN  [Hospital_10, Hospital_5]
# 6.0                [Hospital_4]                        NaN
# 7.0                         NaN               [Hospital_4]
# 8.0   [Hospital_10, Hospital_5]               [Hospital_3]
# 9.0                [Hospital_8]               [Hospital_2]
# 10.0               [Hospital_3]               [Hospital_1]


0 commentaires