Python 将 dict 值扩展为列表

use*_*219 2 python python-2.6

我正在尝试将 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)

dan*_*som 5

因为它.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)