I wanted to avoid double evaluation of a mean in a dict comprehension, and I tried using the walrus operator:
>>> dic = {"A": [45,58,75], "B": [55,82,80,92], "C": [78,95,90], "D":[98,75]}
>>> q = {x: (mean := (sum(dic[x]) // len(dic[x]))) for x in dic if mean > 65}
but this gave me the following error:
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
q = {x: (mean := (sum(dic[x]) // len(dic[x]))) for x in dic if mean > 65}
File "<pyshell#2>", line 1, in <dictcomp>
q = {x: (mean := (sum(dic[x]) // len(dic[x]))) for x in dic if mean > 65}
NameError: name 'mean' is not defined
This error only happens when I try to use the variable, no problem while defining it:
>>> q = {x: (mean := (sum(dic[x]) // len(dic[x]))) for x in dic if (sum(dic[x]) // len(dic[x])) > 65}
>>> mean
86
>>> q
{'B': 77, 'C': 87, 'D': 86}
Why? Where did I get it wrong?
if
part is executed before thex: mean
part) EDIT: just saw that @timgeb's answer is already doing that :) – Floccus