Не удается получить желаемый результат в python

#python-3.x #list

Вопрос:

Мне нужно получить этот вывод в моем коде python: выход

но я получаю ошибку индекса вне диапазона, как это: ошибка

вот мой код:

 marks = [['john',80, 90, 76, 82],['katy', 50, 55, 70, 65],['sydney',80,
72, 88, 90]]
marks_c = {}
for i in range(len(marks)):
    name = marks[i][0]
    l = []
    for j in range(2,len(marks[i])):
        print(marks[j][i])
        print(marks_c)

print(marks_c)
 

Что я делаю не так?

Комментарии:

1. Я думаю , вы имеете в виду marks[i][j] , а не marks[j][i]

2. когда я делаю пометки[j][i], я получаю список чисел и скобок. Это не работает.

3. Попробуйте это: {d[0]: d[1:] для d в знаках}

Ответ №1:

Обеспечивает ли этот код то, что вы ищете:

Код:

 marks = [['john', 80, 90, 76, 82], ['katy', 50, 55, 70, 65], ['sydney', 80, 72, 88, 90]]
marks_c = {}

for entry in marks:
    marks_c[entry.pop(0)] = entry

print(marks_c)

# Upon request of the questioner:
#
# for i in range(len(marks)):
#     name = marks[i][0]
#     l = []
#     for j in range(1,len(marks[i])):
#         l.append(marks[i][j])
#     marks_c[name] = l
 

Выход:

 {'john': [80, 90, 76, 82], 'katy': [50, 55, 70, 65], 'sydney': [80, 72, 88, 90]}
 

Комментарии:

1. ваш код работает, спасибо, но я на самом деле хотел знать, что мне нужно исправить в своем собственном коде, чтобы он работал правильно. не могли бы вы дать мне идею и помочь ее исправить?

2. Прежде всего обратите внимание на комментарий @Loocid к вашему исходному коду: он должен читаться marks[i][j] вместо marks[j][i] . И второе использование range(1,len(marks[i])) вместо range(2,len(marks[i])) . Если вы затем используете l.append(marks[i][j]) во внутреннем цикле for (предполагая, что это то, для чего вы инициализированы l ) и marks_c[name] = l во внешнем цикле for, то вы должны получить тот же результат print(marks_c) .

3. @SuperMaxLv4 Я исправил ваш код и добавил его в качестве комментария к своему исходному коду. Я надеюсь, что это поможет.