2014-01-27 6 views
0

Я собираю списки для создания словарей. У меня возникают проблемы с вызовом ключей после создания словаря.Проблема с доступом к информации из словаря

import xlrd 

from xlrd import open_workbook 
book = open_workbook('inputme.xlsx') 
sheet0 = book.sheet_by_index(0) 


sociallab= sheet0.row(0) 
socialrank= sheet0.row(1) 
OCDlab= sheet0.row(2) 
OCDrank= sheet0.row(3) 
BDDlab=sheet0.row(4) 
BDDrank= sheet0.row(5) 
EDlab= sheet0.row(4) 
EDrank= sheet0.row(5) 

social = dict(zip(socialrank,sociallab)) 
OCD = dict(zip(OCDrank, OCDlab)) 
BDD = dict(zip(BDDrank, BDDlab)) 
ED = dict(zip(EDrank, EDlab)) 

print(ED.keys()) 
ed1 = ED["number:1.0"] 
print(ed1) 

Когда я запускаю это я получаю:

dict_keys([number:3.0, number:4.0, number:8.0, number:7.0, number:5.0, number:1.0, number:2.0, number:6.0]) 
Traceback (most recent call last): 
    File "C:\Users\Lee\Dropbox\Python\ME.py", line 28, in <module> 
    ed1 = ED["number:1.0"] 
KeyError: 'number:1.0' 

я должен делать что-то не так с пониманием, как читать KeyList, но не могу понять, что я делаю неправильно. Я новичок в этом, поэтому он может быть очень простым, но я ничего не могу найти в документации, которая разъясняет.

Любые советы?

Спасибо!

ответ

1

Как подсказки представления (потому что нет никаких кавычек вокруг значений), клавиши фактически не являются строками.

dict_keys([number:3.0, number:4.0, number:8.0, number:7.0, number:5.0, number:1.0, number:2.0, number:6.0]) 

Если вы print(list(map(type, ED))) вы, вероятно, увидите много <class 'xlrd.sheet.Cell'> ссылок. Вместо этого вы можете использовать .row_values(). Сравните (используя некоторые данные, которые у меня есть):

>>> print(sheet0.row(6)[:4]) 
[text:u'  Specialists', empty:'', number:585.0, number:123.0] 
>>> print(list(map(type, sheet0.row(6)[:4]))) 
[<class 'xlrd.sheet.Cell'>, <class 'xlrd.sheet.Cell'>, <class 'xlrd.sheet.Cell'>, <class 'xlrd.sheet.Cell'>] 
>>> print(sheet0.row_values(6)[:4]) 
[u'  Specialists', '', 585.0, 123.0] 
>>> print(list(map(type, sheet0.row_values(6)[:4]))) 
[<type 'unicode'>, <type 'str'>, <type 'float'>, <type 'float'>] 
+0

Спасибо! row_values ​​исправлено – Lee

Смежные вопросы