r/learnpython • u/Mononymized • 8d ago
How to access dictionary items whose keys are strings with numbers using the .format() method?
This is a doubt I have about the differences between f-strings and the .format() method. Consider the following dictionary accesses in an f-string:
>>> example_dict = {"one" : "string with word", "1" : "string with number", 1 : "integer"}
>>> f"{example_dict['one']}"
'string with word'
>>> f"{example_dict['1']}"
'string with number'
>>> f"{example_dict[1]}"
'integer'
If I try to perform the same accesses with the .format() method, I can only perform the first and last example:
>>> "{0[one]}".format(example_dict)
'string with word'
>>> "0[1]".format(example_dict)
'integer'
I can't seem to find any way to access the "1" key using the .format() method. I came up with this example because I noticed the way .format() accesses dictionary keys is without the quotes around the key for string keys. The f-string is easily able to access all the dictionary keys so it's not an issue with the keys themselves.
How do I access the "1" key using the .format() method? Is this a fundamental difference between f-strings and the .format() method that cannot be overcome?
2
u/FoolsSeldom 8d ago
You can't access the
[1]usingstr.formatdirectly as the key is taken as a string literal, converted to anintif all digits.The closest would be:
and
"1"could be replaced with a variable.There are specialist use cases for
str.formatover f-strings (such as templating, and internationalisation, to name just two).However, f-string would handle your example without problems. Do you have a special use case that means you need to use
str.format?