在python中如何从动态键获取字典值

2024-09-29 21:39:08 发布

您现在位置:Python中文网/ 问答频道 /正文

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

结果是: “马诺伊” “马诺伊” “迪比恩杜” “'dibyendu'” “苏拉夫” “苏拉夫” ['dibyendu'、'sourav'、'manoj'] {'dibyendu':(u'd。邮箱:b@gmail.com',),'sourav':(美国)。邮箱:b@gmail.com',),'manoj':(美。邮箱:c@gmail.com',)}

但仍然无法访问打印名为廑email[abc]抛出错误 印刷体姓名\u电子邮件[abc] KeyError:'manoj'


Tags: nameindexvalueemailcellgmailsheetrow
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_mail不包含abc时,才尝试打印name_email[abc](如“else:”语句中所示)。似乎你想做的恰恰相反-打印它时,有一个键,没有键时,添加,对吗?只需重新安排你的if条件。在

现在有点像

^{pr2}$

应该是的

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

正如你所想的那样:

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

你的变量abc显然没有包含你认为的那样,如果你硬编码键时它能工作的话。在

相关问题 更多 >

    热门问题