在一个与python中的字典有关的在线课程中,我的一位同事在输出方面遇到了一个错误,但是奇怪的是,同样的代码在空闲时很好地工作,并打印正确的代码。autograger软件支持Python2.7,基于Skulpt和CodeMirror,因此,为了测试这段代码,我使用了CodeSkulptor Viz模式,它输出了错误的答案。为什么会这样?
handle = [ "From stephen.marquard@uct.ac.za",
"From louis@media.berkeley.edu",
"From zqian@umich.edu",
"From rjlowe@iupui.edu",
"From zqian@umich.edu",
"From rjlowe@iupui.edu",
"From cwen@iupui.edu",
"From cwen@iupui.edu",
"From gsilver@umich.edu",
"From gsilver@umich.edu",
"From zqian@umich.edu",
"From gsilver@umich.edu",
"From wagnermr@iupui.edu",
"From zqian@umich.edu",
"From antranig@caret.cam.ac.uk",
"From gopal.ramasammycook@gmail.com",
"From david.horwitz@uct.ac.za",
"From david.horwitz@uct.ac.za",
"From david.horwitz@uct.ac.za",
"From david.horwitz@uct.ac.za",
"From stephen.marquard@uct.ac.za",
"From louis@media.berkeley.edu",
"From louis@media.berkeley.edu",
"From ray@media.berkeley.edu",
"From cwen@iupui.edu",
"From cwen@iupui.edu",
"From cwen@iupui.edu",
]
answer_key = 0
dct = dict()
for line in handle:
if line.startswith('From '):
email = line.strip().split()[1]
if not email in dct:
dct[email] = 1
else:
dct[email] += 1
answer_key = max(dct, key=dct.get)
print answer_key, dct[answer_key] 正确的输出是cwen@iupui.edu 5
但CodeSculptor打印:
zqian@umich.edu 4发布于 2014-08-10 16:28:52
问题是Skulpt不是Python的一个完整实现,而且您使用的是它不支持的特性:max-or上的max参数,实际上,任何函数上的任何关键字参数(参见医生们)。
如果对稳定版本进行测试,则会得到一个错误:
Line 41: ValueError: Keyword arguments are not supported by this function测试版显然增加了对这一特性的支持,但它显然仍然是错误的,这可能就是为什么你得到了错误的答案。我假设他们有一个错误报告系统,所以您可能应该提交一个bug。
但是,除非您想等到Skulpt的下一个版本完成,并推出一个新版本的CodeSkulptor,否则这不会对您有所帮助;您将需要解决缺少的/ But特性。(一定要留下一条评论,提醒自己或其他读者,为什么你需要解决办法。)
正如分类方法所解释的,在排序相关的函数(包括max,即使这并不明显)有一个key参数之前,Python程序员必须执行名为“装饰-排序(或搜索)-undecorate”的操作:创建一个新的序列,您已经(以某种可逆的方式)对其进行了修改,按照所需的顺序排序,然后调用您的函数,然后反转修改。
在您的情况下,您希望按值排序字典。最简单的方法是创建一个(value, key)对列表,以实现可逆的装饰。它的max将是最高值的value和key,然后要取key。所以:
# Skulpt can't handle key arguments on max, so we have to
# decorate-search-undecorate instead.
deco = [(v, k) for (k, v) in dct.items()]
_, answer_key = max(deco)https://stackoverflow.com/questions/25229868
复制相似问题