J'utilise Google PageSpeed Insights API en Python, et je suis tombé sur un problème déconcertant. L'API me présente une chaîne de format et des arguments pour cette chaîne de format, et j'ai besoin de comprendre comment formater réellement la chaîne. Le problème est que les arguments sont donnés d'une manière vraiment étrange.Python - chaîne comme clé de chaîne variable nommée Format
Voici comment les arguments de la chaîne de format me sont présentés (je montre comme une mission pour la rendre plus claire):
args = [
{
'type': 'INT_LITERAL',
'value': '21',
'key': 'NUM_SCRIPTS'
},
{
'type': 'INT_LITERAL',
'value': '20',
'key': 'NUM_CSS'
}
]
Et ceci est une chaîne de format d'échantillon, également donné moi par l'API:
format = 'Your page has {{NUM_SCRIPTS}} blocking script resources and {{NUM_CSS}} blocking CSS resources. This causes a delay in rendering your page.'
Je sais que, parfois, les gens aiment éviter de répondre à la question posée et au lieu d'offrir une réponse adaptée à leurs croyances sur le codage « droit » et « faux », afin de réitérer, je Je reçois à la fois les arguments et la chaîne de format de l'API. Je ne les crée pas moi-même, donc je ne peux pas le faire de façon plus directe. Ce que je dois savoir est comment extraire le champ clé des dicts dans la liste d'arguments de sorte que je puisse les employer avec "".format
d'une manière qui me laissera passer le champ de valeur aux arguments nommés.
Excusez-moi si cela est en quelque sorte de super évident; Je suis assez nouveau pour Python et je ne connais pas grand chose aux petits détails. J'ai fait mon devoir de diligence et cherché une réponse avant de demander, mais je n'ai rien trouvé et ce n'est pas un problème facile à rechercher.
EDIT: Je pensais que peut-être cette «liste des dicts de la chose était courante avec les API de Google ou quelque chose, que peut-être il y avait un moyen automatique d'associer les arguments (comme string.format_map
). J'ai fini par le faire simplement, sans string.format
.
for x in args:
format = format.replace('{{' + x['key'] + '}}', x['value'])
Est-ce ce que vous voulez? pour NUM_CSS '(item pour item dans args si item [" key "] ==" NUM_CSS "). next() ['value']' et pour NUM_SCRIPTS '(item pour item dans args si item [" key "] = = "NUM_SCRIPTS"). Next() ['value'] ' – Rohanil
Cette liste est, franchement, un non-sens. Votre but est de rechercher des valeurs pour 'NUM_SCRIPTS' et' NUM_CSS', mais cette liste vous permet uniquement de rechercher des valeurs pour une certaine clé pour laquelle il existe une autre clé avec une autre valeur. Il devrait être 'args = {'NUM_SCRIPTS': 21, 'NUM_CSS': 20}' être même utile à distance sans un tas de mauvais code. – TigerhawkT3
@Rohanil - Non, différentes chaînes de format ont des types et des nombres de variables différents, je ne peux pas coder les noms. – bpunsky