如何从动态键获取python中的字典值
结果是: “manoj” “‘manoj’” “迪比恩杜” “迪比恩杜” “苏拉夫” “苏拉夫” ['dibyendu','sourav','manoj'] {'dibyendu':(你会的。b@gmail.com","苏拉夫":(美国)。b@gmail.com’,),‘manoj’:(嗯。c@gmail.com“,)} 但是仍然无法访问打印名称\u电子邮件[abc]抛出错误 打印姓名\u电子邮件[abc]如何从动态键获取python中的字典值,python,Python,结果是: “manoj” “‘manoj’” “迪比恩杜” “迪比恩杜” “苏拉夫” “苏拉夫” ['dibyendu','sourav','manoj'] {'dibyendu':(你会的。b@gmail.com","苏拉夫":(美国)。b@gmail.com’,),‘manoj’:(嗯。c@gmail.com“,)} 但是仍然无法访问打印名称\u电子邮件[abc]抛出错误 打印姓名\u电子邮件[abc] KeyError:“manoj”它的工作原理与您所想的一样: from xlrd imp
KeyError:“manoj”它的工作原理与您所想的一样:
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
如果在硬编码键时,变量abc显然不包含您认为它是的内容。问题不在于用作索引的变量(这很好,可以预期),而在于您的if条件 你的代码
>>> mydict = {"spam": "flat", "eggs": "round"}
>>> print mydict["eggs"]
round
>>> mykey = "eggs"
>>> print mydict[mykey]
round
>>>
当且仅当name\u-mail
不包含abc
键时,才尝试打印name\u-email[abc]
sstatement。似乎您想做的恰恰相反-当有键时打印,当没有键时添加,对吗?只需重新安排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]
虽然它应该是
if x.has_key(y):
x[y] = 1
else:
print x[y]
可能有前导或尾随空格,请尝试
abc=str(sheet.cell(row_index,i).value.strip())
。如果仍然不起作用,请添加print repr(abc)
,然后再尝试访问字典并用输出编辑问题。repr(abc)
打印什么?什么是print name\u email.keys()
告诉你在字典里吗?更好的是,打印“{0}”。格式(repr(abc))
我已经修改了代码并打印了与你要求的相同的内容。请让我知道。完美它有完美的意义,我写了愚蠢的逻辑。谢谢@lejlot很高兴我能提供帮助。记住为你的问题标记正确的答案。
if x.has_key(y):
print x[y]
else:
x[y] = 1