Mon dictionnaire est ci-dessous, si les valeurs se terminent par mon out p> attendu sur p> csv code> ou json code> Je dois mettre dans un autre dictionnaire du même dictionnaire:
6 Réponses :
Vous pouvez utiliser compréhension dict em> avec liste COMP EM> sur chacune des valeurs tout en filtrant avec str.endswith code> . d = {'a': ['1.json', '1.html', '1.csv'], 'B': ['2.json', '2.html', '2.csv']}
new = {k:[i for i in v if i.endswith(('.csv','.json'))] for k,v in d.items()}
# {'a': ['1.json', '1.csv'], 'B': ['2.json', '2.csv']}
Vous pouvez essayer d'utiliser RFind pour trouver le dernier. Dans le nom de fichier et pour ajouter la liste si elle correspond à CSV ou JSON
d = {'a': ['1.json', '1.html', '1.csv'], 'B': ['2.json', '2.html', '2.csv']}
for k, v in d.items():
d[k] = []
for i in v:
if i[i.rfind(".") + 1:] in ('csv', 'json'):
d[k].append(i)
Veuillez le tester:
from collections import defaultdict
x = defaultdict(list)
d = {'a': ['1.json', '1.html', '1.csv'], 'B': ['2.json', '2.html', '2.csv']}
for k, v in d.items():
for i in v:
if i.split('.')[-1] in ['csv', 'json']:
x[k].append(i)
print(dict(x))
Vous ne changez jamais V, le dictionnaire est donc inchangé. Vous devez construire une nouvelle liste uniquement en conservant les valeurs recherchées: ou même mieux: p>
Une solution simple serait la suivante, en supposant que vous souhaitez mettre à jour le dictionnaire existant
Un peu mieux d'utiliser définir code> au lieu de la liste code>. Aussi i.rsplit ('.', 1) [- 1] code> sera plus vite plus rapide. Et vous devriez éviter la modification de la liste pendant que vous êtes itération dessus.
Vous pouvez utiliser le nom de fichier divisé et ajouter une condition pour vérifier le type de fichier (à l'aide de la liste de comparaison peut être une meilleure option si vous souhaitez ajouter plus de types de fichiers).
Combinez ceci avec une compréhension de la liste, ce qui fournit une manière concise Pour créer des listes. P>
d = {'a': ['1.json', '1.html', '1.csv'], 'B': ['2.json', '2.html', '2.csv']}
filtered_d = {key:[item for item in value if item.split('.')[-1] in ['json','csv']] for key, value in d.items()}