Noughts and crosses game for 2 players
Welcome to Python xD!  You did a great job on it ^^

Here are my suggestions

Don‘t code everything all in one function

there are two parts in your one_round


place new piece on board
check if there is a winner or game over


so it is better to divide to 2 functions, or more, it is best that one function just do one thing

Clean up lots if else in it

For example:

if row == "a": 
      row = 0
elif row =="b":
      row = 1
elif row == "c":
      row = 2


You can use dictionary instead, board_row = {"a" : 0, "b": 1, "c": 2} or code like row = ord(row) - ord("a")

if player == "p1":
    p = "Player 1"
elif player == "p2":
    p = "Player 2"


AND

if player == "p1":
    x = 'X'
elif player == "p2":
    x = 'O'


Can be replaced by

player_info = {"p1": ["Player 1", "X"], "p2": ["Player 2", "O"]}
...
p, x = player_info[player]


Check win

You did this in a quit straight forward code, so it is a bit long, also in python it is best to just with 79 chars in one line.


You can list all position of lines and use a for loop to check if there is a winner(if the current player is the winner)


positions = (((0,0),(0,1),(0,2)), ((1,0),(1,1),(1,2)), ...)

for p in positions:
    if len(set([board[x][y] for x, y in p])) == 1:
        ...
        # then we have a winner, and the winner can only be the current player



Or just check the lines around current piece position


directions = (((0,1),(0,-1)), ((1,0),(-1,0)), ((1,1),(1,-1)), ((-1,1),(-1,-1)))

for d in directions:
    for x, y in d:
        line = set()
        current_row, current_col = row, col
        while 0 &lt;= current_row &lt; 3 and 0 &lt;= current_col &lt; 3:
            line.add(board[current_row][current_col])
            current_row += x
            current_col += y
        if len(line) == 1:
            # Win



check if it is a draw just need if all('-' not in b for b in board)


Other

del board[row][col] 
board[row].insert(col, x)


You just need do board[row][col] = x