Причина, по которой вы получаете TypeError
, заключается в том, что df_dict.keys()
является итератором, который дает ключи от dict
один за другим. Элементы, которые он дает, будут (7, 'hello')
и (1, 'fox')
, но он не «знает» это заранее. Сам итератор не имеет ни малейшего представления о том, сколько элементов он имеет или какую структуру могут иметь эти элементы, и, в частности, он не имеет никакого способа получить доступ к элементу по номеру индекса.
Теперь вы можете использовать функцию itertools.islice
для доступа к элементу с пронумерованными номерами из итерируемого, но это включает в себя отброс всего, что приходит заранее. Так что это не то, что вы хотите.
Ответ на этот вопрос вы просят, который, как вы индекс в ключах, чтобы преобразовать их в список первых:
l = list(df_dict.keys())
, а затем вы можете использовать l[0]
и l[1]
и скоро.
Но даже это не то, что вам действительно нужно для вашего приложения. Результирующий список, в вашем примере, будет
[(7, 'hello'), (1, 'fox')]
так l[0]
будет (7, 'hello')
и l[1]
будет (1, 'fox')
(или наоборот, так как вы не знаете, в каком порядке ключи выйдут в). То, что вы на самом деле хотите получить доступ в (7, 1)
и ('hello', 'fox')
, для которого вам необходимо либо использовать что-то вроде списка понимания:
[x[0] for x in l] # (7, 1)
[x[1] for x in l] # ('hello', 'fox')
или вы можете преобразовать его в массив NumPy и транспонировать это.
npl = numpy.array(l) # array([[7, 'hello'], [1, 'fox']])
nplT = npl.T # array([[7, 1], ['hello', 'fox']])
Теперь вы можете использовать nplT[0]
и так далее.