2009-05-29 6 views
1

J'ai un dictionnaire qui stocke une chaîne comme clé et un entier comme valeur. Dans ma sortie je voudrais avoir la clé affichée sous la forme d'une chaîne sans parenthèses ni virgules. Comment ferais-je cela?Formatage de la sortie d'une clé à partir d'un dictionnaire

for f_name,f_loc in dict_func.items(): 
     print ('Function names:\n\n\t{0} -- {1} lines of code\n'.format(f_name, f_loc)) 

sortie:

Enter the file name: test.txt 
line = 'def count_loc(infile):' 

There were 19 lines of code in "test.txt" 

Function names: 

    ('count_loc(infile)',) -- 15 lines of code 

juste Incase il n'a pas été clair, je voudrais la dernière ligne de la sortie à afficher comme:

count_loc(infile) -- 15 lines of code 

EDIT

name = re.search(func_pattern, line).groups() 
name = str(name) 

En utilisant type() avant ma sortie, je veri fied il reste une chaîne, mais la sortie est comme c'était quand le nom était un tuple

Répondre

3

Expliciter Peter's answer, Il me semble que vous attribuer un one-item tuple comme clé de votre dictionnaire. Si vous évaluez une expression entre parenthèses quelque part et que vous l'utilisez comme clé, assurez-vous de ne pas avoir de virgule.

En regardant votre autre réponse éditée, c'est en effet parce que vous utilisez la méthode groups() de votre match regex. Cela renvoie un tuple de (the entire matched section + all the matched groups), et puisque vous n'avez aucun groupe, vous voulez le tout. group() sans paramètres vous donnera cela.

+0

Ah, je vois ce que je faisais, mais je suis toujours pas sûr comment y remédier. Lorsque j'obtenais le nom de la fonction et que j'utilisais une regex, j'utilisais la méthode .groups(). Je vais ajouter le code pour cela dans l'original, parce que je l'ai casté à un str, et il donne toujours la même sortie – Justen

+0

Si vous avez utilisé .groups(), essayez d'utiliser .group() –

+0

qui a fonctionné. Merci beaucoup! – Justen

2

Je suppose que vous avez un problème avec votre code d'analyse. Les lignes telles que écrites devraient fonctionner comme prévu.

4

Je n'ai pas Python 3 donc je ne peux pas le tester, mais la sortie de f_name donne l'impression qu'il s'agit d'un tuple avec un élément. Donc, vous changeriez .format(f_name, f_loc) à .format(f_name[0], f_loc)

EDIT:

En réponse à votre édition, essayez d'utiliser .group() au lieu de .groups()

1

Étant donné que la clé est un type de ligne, vous pouvez joindre les différents éléments avant d'imprimer. Nous ne pouvons pas vraiment dire quelle est la signification de la clé à partir de l'extrait illustré.

Vous pourriez faire quelque chose comme par exemple:

.format(", ".join(f_name), f_loc) 
+0

+1 un bon point. –

Questions connexes