2013-07-20 7 views
0

У меня есть небольшая программа для практики полки, которая выполняется, как ожидалось, в python 2.7. Я переехал его на 3.3, как таковой:Необычное поведение с shelve.keys() в python 3.3

import shelve 

db = shelve.open('lib') 
db['a'] = "string1" 
db['b'] = "string2" 
keylist = db.keys() 
print(keylist) 
db.close() 

Теперь я получаю этот результат (точно не ошибка, но не желаемое поведение:

KeysView(<shelve.DbfilenameShelf object at 0x7f0f06b3be90>) 

Любые идеи о том, что происходит не так и как чтобы исправить это? изменилось ли что-то в полку для 3.3?

ответ

0

shelve призван вести себя как dict который изменил ... в 2.x dict «s использование Python возвращает список, когда .keys() был вызван, в Python 3.x он возвращает вид объект ключей. Если вы хотите получить фактические ключи, вы должны материализовать их до list:

keylist = list(db.keys()) 
+0

Отлично. Это работает. Спасибо. –