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'
[` Dibyendu',Sourav',Manoj']
-=YTET字幕组=-翻译:
但仍然无法通过邮件打印您的名字
Print name \ u email[ABC]
Keyerror Manoj

最佳答案

问题不在于用作索引的变量(这很好,而且可以像预期的那样工作),而在于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键时(如“else:”语句中所示),尝试打印abc。好像你想做完全相反的事情-当它有一个键时打印它,当它没有键时添加它,对吧?简单地重新安排你的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

关于python - 如何从动态键获取python中的字典值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18599434/

10-15 00:44