J'ai une liste d'URL qui ont un motif similaire comme celui-ci:
{"0008c5398": ['../abc/def/xyz/0008c5398-1.jpg',
'../abc/def/xyz//0008c5398-2.jpg',
'../abc/def/xyz//0008c5398-3.jpg',
'../abc/def/xyz//0008c5398-4.jpg',
'../abc/def/xyz//0008c5398-5.jpg'],
"000a290e4": [ '../abc/def/xyz//000a290e4-1.jpg',
'../abc/def/xyz//000a290e4-2.jpg'],
"000fb9572": [ '../abc/def/xyz//000fb9572-1.jpg',
'../abc/def/xyz//000fb9572-2.jpg',
'../abc/def/xyz//000fb9572-3.jpg',
'../abc/def/xyz//000fb9572-4.jpg']
}
6 Réponses :
Regardez dans des expressions régulières. Une approche serait de faire correspondre les URL contre une regex et de stocker les résultats dans un dictionnaire qui utilise un groupe numéroté dans la correspondance en tant que clé et ajoutez l'URL à la valeur:
import re
urls = ['../abc/def/xyz/0008c5398-1.jpg',
'../abc/def/xyz//0008c5398-2.jpg',
'../abc/def/xyz//0008c5398-3.jpg',
'../abc/def/xyz//0008c5398-4.jpg',
'../abc/def/xyz//0008c5398-5.jpg',
'../abc/def/xyz//000a290e4-1.jpg',
'../abc/def/xyz//000a290e4-2.jpg',
'../abc/def/xyz//000fb9572-1.jpg',
'../abc/def/xyz//000fb9572-2.jpg',
'../abc/def/xyz//000fb9572-3.jpg',
'../abc/def/xyz//000fb9572-4.jpg']
result = {}
rgx = re.compile(r"\.\./abc/def/xyz//(.*)-\d+.jpg")
for url in urls:
match = rgx.search(url)
if match:
key = match.group(1)
if key not in result:
result[key] = []
result[key] += [url]
else:
print(f'This did not match: {url}')
Vous pouvez utiliser sortie: p> itheroTools.groupby code>:
Alternativement, vous pouvez également faire une division simple et obtenir le dernier élément de chaque URL pour obtenir le nom de l'image avant de séparer le nom pour obtenir l'ID d'image.
Après lequel vous pouvez vérifier si l'ID d'image existe dans Votre dictionnaire de résultat ou non et l'a annoncez à l'entrée du dictionnaire en conséquence. P>
inputURLs = ['../abc/def/xyz/0008c5398-1.jpg',
'../abc/def/xyz//0008c5398-2.jpg',
'../abc/def/xyz//0008c5398-3.jpg',
'../abc/def/xyz//0008c5398-4.jpg',
'../abc/def/xyz//0008c5398-5.jpg',
'../abc/def/xyz//000a290e4-1.jpg',
'../abc/def/xyz//000a290e4-2.jpg',
'../abc/def/xyz//000fb9572-1.jpg',
'../abc/def/xyz//000fb9572-2.jpg',
'../abc/def/xyz//000fb9572-3.jpg',
'../abc/def/xyz//000fb9572-4.jpg']
resultDict = {}
for inputUrl in inputURLs :
imageName = inputUrl.split('/')[-1]
imageId = imageName.split('-')[0]
if imageId in resultDict :
resultDict[imageId].append(inputUrl)
else :
resultDict[imageId] = [inputUrl]
Voici une solution simple d'itération de la liste et d'ajouter à un dictionnaire.
{'0008c5398': ['../abc/def/xyz/0008c5398-1.jpg',
'../abc/def/xyz//0008c5398-2.jpg',
'../abc/def/xyz//0008c5398-3.jpg',
'../abc/def/xyz//0008c5398-4.jpg',
'../abc/def/xyz//0008c5398-5.jpg'],
'000a290e4': ['../abc/def/xyz//000a290e4-1.jpg',
'../abc/def/xyz//000a290e4-2.jpg'],
'000fb9572': ['../abc/def/xyz//000fb9572-1.jpg',
'../abc/def/xyz//000fb9572-2.jpg',
'../abc/def/xyz//000fb9572-3.jpg',
'../abc/def/xyz//000fb9572-4.jpg']}
Vous pouvez continuer à ajouter les URL à un dict de listes à l'aide de dict.setdefault code> pour initialiser chaque nouvelle clé avec une liste (en supposant que votre liste d'URL est stockée comme l code> ): d code> devient: p>
Tout d'abord au début, vous avez besoin d'une fonction pour obtenir la clé de vos articles. Vous pouvez utiliser et ensuite, vous avez besoin d'une boucle pour vérifier chaque article et faire la même chose que ci-dessus. et pour le rendre simple, vous pouvez utiliser Je ne sais pas si vous avez une erreur d'orthographe dans votre premier élément de vos échantillons de données . re code>. defaultDict code>. p> / DEF / XYZ / CODE> est différent avec les autres éléments, si vous ne pouvez pas simplement modifier le modèle re code> par supprimer le / code> de PAT code> comme vous avez besoin. P> p>