Как реализовать добавление в словарь элементов?

n = int(input())
sl = {}
for i in range(n):
  a = list(map(int(input())))
  sl[n//2] = 

к примеру на вход подаются такие числа:

3
1 2 3 4
3 2 3 1
4 1 5 3

пытаюсь сделать так, чтобы в словарь попадал ключ - это число из строки матрицы, индекс которой n // 2, а значение к этому ключу – список отсортированных по возрастанию нечетных чисел того же столбца и той же строки (без числа-ключа) без повторений

проблема в том что ключ n//2 я добавляю ,но к нему нужно ведь добавлять и значение сразу же, а как его добавлять я не знаю, ибо нужно же в качестве значения взять числа из строки и столбца, а если к примеру только ввели 1 строку, то столбца же всего нет, чтобы взять значения

примерно, как должно получиться в итоге(входные данные к этому рез-ту написаны выше в примере):

{3: [1, 3, 5], 2: [1, 3], 1: [3]}

UPDATE:

Zhihar

Вывод

{1: [1, 3, 5], 2: [1, 3], 3: [1, 3, 5], 4: [1, 3, 5], 5: [1, 3, 5]}

Вывод

{1: [3, 5], 2: [1, 3], 3: [1, 3, 5], 4: [1, 3, 5], 5: [1, 3]}

UPDATE 2.0:

Более четкая формулировка:

Формат ввода

Вводится число n – количество строк в списке.

Затем вводятся строки из чисел, записанных через пробел.

Формат вывода

Вывести словарь, в котором ключи – это числа из строки матрицы, индекс которой n // 2, а значения – список отсортированных по возрастанию нечетных чисел того же столбца и той же строки (без числа-ключа) без повторений. Если в строке встречаются одинаковые числа, то значения добавляются в один список


Ответы (3 шт):

Автор решения: Zhihar

это не так работает:

a = list(map(int(input())))

надо

a = list(map(int, input().split()))

т.е.

  1. получить ввод пользователя input()
  2. разбить полученный текст на слова (через пробел как разделитель) .split()
  3. к каждому слову применить функцию int() через map (функция вызывается указанную функцию int() к каждому элементу списка и записывает результат в новый список)
→ Ссылка
Автор решения: Zhihar

Если я правильно понял задачу, то должно получиться как-то так:

без оптимизаций, более-менее в лоб

# получить входные данные от пользователя
matrix = [list(map(int, input().split())) for _ in range(int(input()))]


# проанализировать данные
dictionary = {}

for i in range(len(matrix)):
    for j in range(len(matrix[i])):
        key = matrix[i][j]

        # проанализировать строку и получить нечетные значения
        line1 = [matrix[i][x] for x in range(len(matrix[i])) if matrix[i][x] % 2]

        # проанализировать столбец и получить нечетные значения
        line2 = [matrix[x][j] for x in range(len(matrix)) if matrix[x][j] % 2]

        # добавить в словарь
        if key not in dictionary:
            dictionary[key] = []

        dictionary[key] = sorted(set(dictionary[key] + line1 + line2))

print(dictionary)

если сам элемент (i, j) в анализе участвовать не должен, тогда надо сделать так:

    # проанализировать строку и получить нечетные значения
    line1 = [matrix[i][x] for x in range(len(matrix[i])) if matrix[i][x] % 2 and x != j]

    # проанализировать столбец и получить нечетные значения
    line2 = [matrix[x][j] for x in range(len(matrix)) if matrix[x][j] % 2 and x != i]

P.S.

разобравшись с задачей получается такой код (через упрощение первоначального общего):

# получить входные данные от пользователя
matrix = [list(map(int, input().split())) for _ in range(int(input()))]


# проанализировать данные
dictionary = {}

for i in range(len(matrix)):
    for j in range(len(matrix[i])):
        if i == len(matrix) // 2:
            # проанализировать строку и получить нечетные значения
            line1 = [matrix[i][x] for x in range(len(matrix[i])) if matrix[i][x] % 2 and x != j]

            # проанализировать столбец и получить нечетные значения
            line2 = [matrix[x][j] for x in range(len(matrix)) if matrix[x][j] % 2 and x != i]

            # добавить в словарь
            key = matrix[i][j]
            if key not in dictionary:
                dictionary[key] = []

            dictionary[key] = sorted(set(dictionary[key] + line1 + line2))

print(dictionary)

P.P.S.

код можно пооптимизировать, например если перенести условия и вычисления связанные только с i под for i и над for j - т.е. кол-во вычислений можно значительно сократить (на случай, если тест еще и время засекает)

→ Ссылка
Автор решения: Stanislav Volodarskiy

Цикл по средней строке. В цикле собираем нечётные числа из столбцов в словарь. Аналогично собираем числа из средней строки. Элемент в центре "креста" пропускаем - он ключ но в значение не должен попасть. Отдельный цикл множества переводит в упорядоченные списки:

def odd_set(iterable):
    return set(v for v in iterable if v % 2 == 1)

n = int(input())
m = tuple(
    tuple(map(int, input().split()))
    for _ in range(n)
)

cols = {}
for j, k in enumerate(m[n // 2]):
    col_set = odd_set(r[j] for i, r in enumerate(m) if i != n // 2)
    row_set = odd_set(vv for jj, vv in enumerate(m[n // 2]) if jj != j)
    cols.setdefault(k, set()).update(col_set | row_set)

print({k: sorted(v) for k, v in cols.items()})
$ echo -e "3\n1 2 3 4\n3 2 3 1\n4 1 5 3"
3
1 2 3 4
3 2 3 1
4 1 5 3

$ echo -e "3\n1 2 3 4\n3 2 3 1\n4 1 5 3" | python strange_matrix.py 
{3: [1, 3, 5], 2: [1, 3], 1: [3]}
→ Ссылка