J'ai une difficulté à convertir un dictionnaire vraiment redondant en une fonction (def)
le code d'origine qui fonctionne simplement bien est: p> qui imprime comme étant. .. p> mais fort> le problème est p> SO P> Je pensais peut-être que je pourrais peut-être fonctionner et écrit ce code ... p> qui m'a donné ... < / p>
4 Réponses :
Vous essayez d'utiliser la chaîne X pour accéder au nom de la variable qui ne fonctionnera pas comme vous vous attendez, car x détient la valeur "stylo", par exemple. Ce n'est pas nécessairement une approche recommandée, mais vous pouvez utiliser la fonction ici, les locaux renvoient un dictionnaire des variables définies localement et vous pouvez utiliser la chaîne X comme une touche pour accéder à la valeur de la variable. Donc em>, ce serait mieux (et plus sûr) de stocker vos tuples directement dans un dictionnaire quelque part ou peut-être dans un fichier que vous lisez si vous ne voulez pas un bloc long dans votre code, puis accédez à la Les données à travers là-bas comme si vous essayiez à l'origine, sauf que vous pouvez stocker tout le tuple plutôt que le prix, puis accéder au premier élément du tuple pour le prix. Si vous vouliez stocker tout cela dans un fichier JSON par exemple, car vous aurez des centaines de dict, vous pouvez le faire: p> fichier JSON: p> code: p> locaux code> pour obtenir de manière dynamique la valeur de la variable comme suit:
locals () ['stylo'] code> vous donnera la valeur
(9, 'toujours', "lundi") code> p>
locaux code> renvoie un dictionnaire du nom de la variable en tant que clé et la valeur de variable comme valeur, de sorte que cela accomplissait essentiellement ce que vous pouvez faire en premier lieu avec stocker la valeur dans un dict p>
Hey merci pour votre réponse. Devrais-je simplement écrire tout le dictionnaire au lieu d'essayer de réduire la redondance? Mais alors .. arg je ne peux tout simplement pas comprendre une façon économique de le faire
@Jeewoolere à la fin de la journée, vous devez stocker les données quelque part et obtenir la valeur en quelque sorte, alors je pense que mettre tous les tuples dans un dictionnaire est probablement votre meilleur et le meilleur plus sûr
@Jeewoolere Depuis que vous avez beaucoup de données, j'ai ajouté un échantillon de la manière dont vous pourriez le stocker dans un fichier JSON qui est probablement votre solution la plus facile
L'autre commentaire @thomas Kläger et le vôtre ont résolu mon problème! HUH JSON File et mettant des tuples dans un DIC iraient bien. Bien que la création d'un fichier séparé serait beaucoup plus sûr
Attends-je juste demander une autre question? Je suis désolé Ahh comment n'avez-vous importé que 9 de la [9, "toujours", "lundi"]?
@Jeewoolkee sûr, pas de problème. Vous posez des questions sur l'exemple JSON ou le premier échantillon en utilisant locaux code>?
Dans les deux cas, depuis [9, "toujours", "lundi"] code> est une liste (ou un tuple dans le cas de votre code), je viens de tirer le premier élément en indexant la valeur à position 0 de la iereable. Si la variable
z code> a la valeur
[9, "toujours", "lundi"] code> alors je voudrais juste faire
z [0] code> pour obtenir le 9
Comme vous avez donné: et appelé la fonction avec x comme stylo code>, il imprime
x [0] = 'stylo "[0] = 'P' code>. Cela vous a causé le problème. Alors essayez: p>
J'ai un peu simplifié?
Vous pouvez écrire vos données sous forme de dictionnaire du début (les valeurs d'un dictionnaire peuvent être n'importe quel type, un tuple va bien):
OMG Cela résout mon problème! Merci beaucoup! Je ne savais pas que je peux stocker des valeurs dans un dic comme tuple! C'est parfait merci génie! 🤩
Si vous auriez besoin d'être plus flexible avec votre structure de données, vous pouvez également compter sur des clés sémantiques, plutôt que de fonctionner avec des index de tuples.
import yaml # pyyaml package with open("products.yaml", 'r') as stream: try: products = yaml.safe_load(stream) except yaml.YAMLError as exc: print(exc) print(products) print(products['Pen']['price']) def find_price(product_name): try: return products[product_name]['price'] except KeyError: return "N/A" print(find_price('Pen')) print(find_price('Scissors'))