2
from xlrd import open_workbook

book = open_workbook('trial.xls')
sheet=book.sheet_by_index(0)

name_email={}

i=0
for row_index in range(sheet.nrows):
    if name_email.has_key(sheet.cell(row_index,i).value):
         name_email[str(sheet.cell(row_index,i).value.strip())]=sheet.cell(row_index,i+1).value,)
    else:              
        abc = str(sheet.cell(row_index,i).value.strip())
        print repr(abc)
        print '"{0}"'.format(repr(abc))
        # print name_email[abc]
        name_email[str(sheet.cell(row_index,i).value.strip())]=sheet.cell(row_index,i+1).value
i+=1            
print name_email.keys()
print name_email

输出是:'manoj' "'manoj'" 'dibyendu' "'dibyendu'" 'sourav' "'sourav'" ['dibyendu', 'sourav', 'manoj'] {'dibyendu': (u' d.b@gmail.com',), 'sourav': (u's.b@gmail.com',), 'manoj': (u'm.c@gmail.com',)}

但仍然无法访问 print name_email[abc] 抛出错误 print name_email[abc] KeyError: 'manoj'

4

2 回答 2

3

它就像你想象的那样工作:

>>> mydict = {"spam": "flat", "eggs": "round"}
>>> print mydict["eggs"]
round
>>> mykey = "eggs"
>>> print mydict[mykey]
round
>>>

您的变量abc显然不包含您认为的内容,如果它在您对密钥进行硬编码时有效。

于 2013-09-03T18:54:56.340 回答
2

问题不在于用作索引的变量(这很好,并且可以按预期工作),而在于您的 if 条件。

你的代码

if name_email.has_key(sheet.cell(row_index,i).value):
    name_email[str(sheet.cell(row_index,i).value)]=(sheet.cell(row_index,i+1).value,)
else:
    #print name_email[str(sheet.cell(row_index,i).value)]

    abc= str(sheet.cell(row_index,i).value)
    print name_email[abc]

name_email[abc]当且仅当name_mail 不包含密钥时才尝试打印abc(因为它在“else:”语句中。看起来您想做完全相反的事情 - 当它密钥时打印它,并在没有密钥时添加,对吗?只需重新排列你的 if 条件。

现在它就像

if x.has_key(y):
    x[y] = 1
else:
    print x[y]

虽然它应该是

if x.has_key(y):
    print x[y]
else:
    x[y] = 1
于 2013-09-03T18:57:49.710 回答