Reputation: 241
Is it possible to have a dictionary or set comprehension inside of an f-string in python 3.6+?
It seems syntactically impossible:
names = ['a', 'b', 'c']
pks = [1, 2, 3]
f"{{name : pk for name, pk in zip(names, pks)}}"
This will return:
{name : pk for name, pk in zip(names, pks)}
This is expected behavior, double brackets result in literal brackets in the output as the expression isn't evaluated.
Has anyone found a workaround to allow for dictionary/set comprehensions inside of f-strings?
Upvotes: 24
Views: 4783
Reputation: 21361
Add spaces, they are syntactically required and won’t appear in the resulting string:
>>> names = ['a', 'b', 'c']
>>> pks = [1, 2, 3]
>>> f"{ {name: pk for name, pk in zip(names, pks)} }"
# ▲ ▲
# │ │
# ╰───────────────See the spaces?────────────╯
"{'a': 1, 'b': 2, 'c': 3}"
Upvotes: 31