Sont il dictionnaire des inclusions en Python? (Problème avec la fonction de retour dict)
Je sais sur les interprétations de la liste, ce sujet de dictionnaire des compréhensions?
Résultat Attendu:
>>> countChar('google')
{'e': 1, 'g': 2, 'l': 1, 'o': 2}
>>> countLetters('apple')
{'a': 1, 'e': 1, 'l': 1, 'p': 2}
>>> countLetters('')
{}
Code (je suis débutant):
def countChar(word):
l = []
#get a list from word
for c in word: l.append(c)
sortedList = sorted(l)
uniqueSet = set(sortedList)
return {item:word.count(item) for item in uniqueSet }
Quel est le problème avec ce code? Pourquoi ai-je cette SyntaxError
?
return { item:word.count(item) for item in uniqueSet }
^
SyntaxError: invalid syntax
- L'erreur de syntaxe est extra
)
:word.count(item))
- corrigés.mais toujours eu des problèmes
- Pouvez-vous coller l'erreur que vous obtenez?
from collections import Counter as countChar
Vous devez vous connecter pour publier un commentaire.
modifier: Comme agf a souligné dans les commentaires et l'autre réponse, il y a un dictionnaire de la compréhension pour Python 2.7 ou une version plus récente.
Il n'est pas nécessaire de convertir
word
à une liste ou à les trier avant de les transformer en un ensemble, depuis les chaînes de caractères sont itératif:Il n'y a pas de dictionnaire de compréhension pour Python 2.6 et ci-dessous, qui pourrait être pourquoi vous voyez l'erreur de syntaxe. L'alternative est de créer une liste de clé-valeur des n-uplets à l'aide d'une compréhension ou d'un générateur et de passage que dans le
dict()
intégré.lambda
à une définition de fonction normale, je vais ajouter quelques explications supplémentaires.Si vous êtes sur Python 2.7 ou plus récent:
fonctionne très bien. Vous n'avez pas besoin de trier la liste avant de vous la définissez. Vous n'avez pas besoin de passer le mot dans une liste. Aussi, vous êtes sur une nouvelle assez de Python pour utiliser
collections.Counter(word)
à la place.Si vous êtes sur une ancienne version de Python, vous ne pouvez pas utiliser
dict
des compréhensions, vous devez utiliser un générateur d'expression avec ladict
constructeur:Ce encore vous oblige à effectuer une itération sur
word
len(set(word))
fois, alors essayez quelque chose comme: