Непосредственная проблема в том, что '%s' % k
- это не то же самое, что str(k)
, но медленнее - это:
- То же, что и
str(k)
, но медленнее, если k
- это что-тоно кортеж, - То же самое, что и
str(k[0])
, если k
- это одноэлементный кортеж, или - A
TypeError
, если k
- это кортеж любой другой длины..
Оператор %
принимает кортеж, но для совместимости с Python Ancient 1.2 или около того и для быстрого и грязного взлома на интерактивном терминале он рассматривает все, что не является кортежем, как единое целое.-элементный кортежЭто работает, за исключением случаев, когда вы на самом деле присваиваете ему кортеж.
Если вы не понимаете, почему k
является кортежем - это именно то, что dict.items()
повторяет: кортежи со значением ключа.
Чтобы исправить это, вы можете использовать '%s' % (k,)
.Это на самом деле - это то же самое, что и str(k)
, но медленнее.
Но почему вы хотите то же самое, что и str(k)
, но медленнее?Почему бы просто не str(k)
?
Но тогда неясно, почему вы пытаетесь сделать это в первую очередь, и все, что он собирается сделать, это дать вам еще TypeError
.
[str(item)]
- список из одной строки.(Строка оказывается строковым представлением кортежа со значением ключа из globals()
, но это на самом деле здесь не имеет значения.) Затем вы пытаетесь проиндексировать этот список с помощью 'Top 10'
, что, очевидно, не является индексом..
Если эта ошибка не очевидна, представьте, что вы написали бы вместо этого:
lst = [1, 2, 3]
lst['Top 10'] = 'a'
Может быть, то, что вы хотели:
for k in globals().values():
k['Top 10'] = 'a'
Но это тоже не сработает.Есть еще несколько проблем, которые необходимо решить, но в конечном итоге вы столкнетесь с проблемой, которая не может быть решена.
globals()
содержит всех ваших глобальных, а не толькоте, что вы создали выше.
Например, он содержит Partidas
, k
и, вероятно, pd
.И куча других модулей, которые вы импортировали, функции, которые вы определили, и так далее.Большинство из этих вещей не являются диктовками, фреймами данных или другими видами отображений, поэтому вы просто получите еще один TypeError
.Хуже того, некоторые из них являются сопоставлениями, но не сопоставлениями, к которым вы хотели добавить ключ 'Top 10'
, и для них вы будете молча повреждать ваши данные вместо получения ошибки.
Все это просто демонстрирует, почему вы не хотите создавать целую кучу глобальных переменных.Если бы вы, скажем, просто создали один глобальный диктант и сохранили в нем все, это было бы просто.
Примерно так:
stuff = {}
for i, j in zip(Partidas,Partida2):
stuff[j] = data2.loc[data2['Partida']==i]
for k in stuff.values():
k['Top 10'] = 'a'