If you are interested to know why these are the limits, you can read the relevant code starting here:
https://github.com/bitcoin/bitcoin/blob/e9262ea32a6e1d364fb7974844fadc36f931f8c6/src/policy/policy.cpp#L26The dust limit is 3000 sat/kvB, or 3 sats/vbyte, of the minimum amount of data required to spend that type of output.
For a legacy P2PKH transaction, then an input is 148 bytes, and an output is 34 bytes, giving (148+34)*3 = 546 sats.
For a segwit v0 P2WPKH transaction, then an input is 67 bytes and an output is 31 bytes, giving (67+31)*3 = 294 sats.*
For any script hash or taproot outputs, however, then the size of the input is not known in advance, since the locking script is not revealed until after the transaction is made. So instead we use the size of a standard input, and the size of the specific output.
So for a taproot P2TR transaction, then an input is assumed to be 67 bytes and an output is 43 bytes, giving (67+43)*3 = 330 sats.
*This should actually be 297 sats in reality, but a rounding error means that 67.75 is rounded down to 67 instead of up to 68.