En Python 3.6, j'ai une liste comme celle ci-dessous et je n'arrive pas à comprendre comment rechercher correctement les valeurs. Donc, si on me donne la chaîne de recherche ci-dessous, je dois rechercher les valeurs du titre et des balises et celle qui correspond le mieux, je retournerais l'identifiant et s'il y avait beaucoup d'images différentes (ids) avec le même montant des matches, alors celui dont le titre vient en premier par ordre alphabétique serait retourné. En outre, il est supposé ne pas être sensible à la casse. Donc, dans le code, j'ai la recherche en tant que mon terme à rechercher et il devrait retourner la première valeur d'identification, mais retourne plutôt des valeurs différentes.Comment rechercher dans une liste imbriquée avec un dictionnaire en Python?
image_info = [
{
"id" : "34694102243_3370955cf9_z",
"title" : "Eastern",
"flickr_user" : "Sean Davis",
"tags" : ["Los Angeles", "California", "building"]
},
{
"id" : "37198655640_b64940bd52_z",
"title" : "Spreetunnel",
"flickr_user" : "Jens-Olaf Walter",
"tags" : ["Berlin", "Germany", "tunnel", "ceiling"]
},
{
"id" : "34944112220_de5c2684e7_z",
"title" : "View from our rental",
"flickr_user" : "Doug Finney",
"tags" : ["Mexico", "ocean", "beach", "palm"]
},
{
"id" : "36140096743_df8ef41874_z",
"title" : "Someday",
"flickr_user" : "Thomas Hawk",
"tags" : ["Los Angeles", "Hollywood", "California", "Volkswagen", "Beatle", "car"]
}
]
my_counter = 0
search = "CAT IN BUILding"
search = search.lower().split()
matches = {}
for image in image_info:
for word in search:
word = word.lower()
if word in image["title"].lower().split(" "):
my_counter += 1
print(my_counter)
if word in image["tags"]:
my_counter +=1
print(my_counter)
if my_counter > 0:
matches[image["id"]] = my_counter
my_counter = 0
Que voulez-vous dire quand vous dites « retour »? Vous ne retournez rien? Quel est exactement votre résultat attendu, et en quoi diffère-t-il de ce que vous avez? Pouvez-vous être plus explicite? –
J'ai couru votre code et il m'a donné le premier ID à l'intérieur des matchs dict. Cependant, il y a un bug avec les tags. Vous mettez en minuscule les mots dans la chaîne de recherche et non dans les étiquettes, mais les étiquettes contiennent des mots en majuscules. Vous ne serez pas en mesure de faire correspondre Los Angeles par exemple. – bouma
@ juanpa.arrivillaga Donc, j'utilise le terme de recherche "CAT IN BUILding" pour faire une recherche parmi les valeurs du titre et des balises dans la liste/dictionnaire, et je veux que la fonction retourne le nombre de correspondances trouvées. Donc, pour "CAT IN BUILding" il devrait retourner 1 et l'ID de l'endroit où il a trouvé le match à 34694102243_3370955cf9_z. Si le terme de recherche était "construire au Mexique plage", il devrait renvoyer 34944112220_de5c2684e7_z car il y avait 2 correspondances dans les tags. – Gray