0
votes

Avoir un problème de fabrication d'un dictionnaire redondant dans une fonction

J'ai une difficulté à convertir un dictionnaire vraiment redondant en une fonction (def)

le code d'origine qui fonctionne simplement bien est: xxx

qui imprime comme étant. .. xxx

mais le problème est

    1. J'ai non seulement un stylo et du papier mais probablement un autre 100-200 autres utilles d'écrire
    2. et Chaque tuple doit contenir plusieurs informations ... L'objectif final de ce programme est donc de pouvoir aller chercher diverses informations à partir des index de tuple et les imprimer.

      SO

      Je pensais peut-être que je pourrais peut-être fonctionner et écrit ce code ... xxx

      qui m'a donné ... < / p> xxx

      aidez-moi s'il vous plaît


0 commentaires

4 Réponses :


0
votes

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 locaux pour obtenir de manière dynamique la valeur de la variable comme suit: xxx

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 locals () ['stylo'] vous donnera la valeur (9, 'toujours', "lundi")

, 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. locaux 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

Si vous vouliez stocker tout cela dans un fichier JSON par exemple, car vous aurez des centaines de dict, vous pouvez le faire:

fichier JSON: xxx

code: xxx


7 commentaires

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 ?


Dans les deux cas, depuis [9, "toujours", "lundi"] 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 a la valeur [9, "toujours", "lundi"] alors je voudrais juste faire z [0] pour obtenir le 9



0
votes

Comme vous avez donné: xxx

et appelé la fonction avec x comme stylo , il imprime x [0] = 'stylo "[0] = 'P' . Cela vous a causé le problème. Alors essayez: xxx


1 commentaires

J'ai un peu simplifié?



0
votes

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): XXX


1 commentaires

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! 🤩



0
votes

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.

Produits.YAML H3>
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'))


0 commentaires