Python copied the C formatting instructions.
For output, %i and %d are the exact same thing, both in Python and in C.
The difference lies in what these do when you use them to parse input, in C by using the scanf() function. See Difference between format specifiers %i and %d in printf.
Python doesn't have a scanf equivalent, but the Python string formatting operations retained the two options to remain compatible with C.
The new str.format() and format() format specification mini-language dropped support for i and stuck with d only.