尝试使用列表推导过滤字典

use*_*174 0 python

使用单个语句,打印一个只包含原子符号及其对应权重的字典,这些元素位于wts(我的字典)中,这些元素在原子符号中只有一个字母.即,包括'H'但省略'他'.我的字典设置为{'H':'1.00794','He':'4.002602','Li':'6.941','Be':'9.012182','B':'10.811','C':'12.0107','N':'14.0067','O':'15.9994'}

[for element in wts if len(element) == 1]
Run Code Online (Sandbox Code Playgroud)

我在想列表理解会起作用,但是,我怎么会只看元素符号.这会返回以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_45.py", line 10, in <module>
    exec compile(u"print _support_.syseval(python, u'[for element in wts if len(element) == 1]', __SAGE_TMP_DIR__)" + '\n', '', 'single')
  File "", line 1, in <module>

  File "/sagenb/sage_install/sage-5.3-sage.math.washington.edu-x86_64-Linux/devel/sagenb-git/sagenb/misc/support.py", line 487, in syseval
    return system.eval(cmd, sage_globals, locals = sage_globals)
  File "/sagenb/sage_install/sage-5.3-sage.math.washington.edu-x86_64-Linux/local/lib/python2.7/site-packages/sage/misc/python.py", line 53, in eval
    eval(compile(s, '', 'exec'), globals, globals)
  File "", line 3
    [for element in wts if len(element) == 1]
       ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

Gre*_*ill 5

您有语法错误(如Python所述).使用:

[element for element in wts if len(element) == 1]
Run Code Online (Sandbox Code Playgroud)

列表理解必须以表达式之前的表达式开头for.使用此语法,您可以应用进一步的操作,例如大写,例如:

[element.upper() for element in wts if len(element) == 1]
Run Code Online (Sandbox Code Playgroud)

因为你必须重复迭代变量名,所以你经常会看到用短变量名写的理解.我可以用以下方式编写x:

[x for x in wts if len(x) == 1]
Run Code Online (Sandbox Code Playgroud)