我正在尝试将 dict 值扩展到 python 2.6 中的列表中,当我运行扩展时,我没有将所有字典值都放入列表中。我缺少什么?
def cld_compile(ru,to_file,cld):
a = list()
p = subprocess.Popen(ru, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
a = p.stdout.readlines()
p.wait()
if (p.returncode != 0):
os.remove(to_file)
clderr = dict()
clderr["filename"] = cld
clderr["errors"] = a[1]
return clderr
def main():
clderrors = list()
<removed lines>
cldterr = cld_compile(ru,to_file,cld)
clderrors.extend(cldterr)
Run Code Online (Sandbox Code Playgroud)
cldterr的返回值:
print cldterr
{'errors': 'fail 0[file.so: undefined symbol: Device_Assign]: library file.so\r\n', 'filename': '/users/home/ili/a.pdr'}
Run Code Online (Sandbox Code Playgroud)
当我尝试将 cldterr 扩展到 clderrors 列表时,我只得到:
print clderrors
['errors', 'filename']
Run Code Online (Sandbox Code Playgroud)
因为它.extend()需要一个序列,所以您想要使用append()它需要一个对象。
例如
>>> l = list()
>>> d = dict('a':1, 'b':2}
>>> l.extend(d)
['a', 'b']
>>> l2 = list()
>>> l2.append(d)
[{'a':1, 'b':2}]
Run Code Online (Sandbox Code Playgroud)
在Python中,当你迭代字典时,你会得到它的键作为序列,因此,当extends()仅使用字典时,键会被添加到列表中——因为Python要求我们在循环中迭代字典时得到相同的迭代器for。
>>> for k in d:
print k
a
b
Run Code Online (Sandbox Code Playgroud)