Python plistlib:没有正确嵌套?

Python plistlib:没有正确嵌套?,python,list,dictionary,plist,Python,List,Dictionary,Plist,我的代码: current_bex = dict( objectName = 'myData', objects = list( dict( one = 1, foo = 'bar', ), ), ) try: writePlist(current_bex, 'someFile.plist') except TypeError: print 'caught t

我的代码:

current_bex = dict(
    objectName = 'myData',
    objects = list(
        dict(
            one = 1,
            foo = 'bar',
        ),
    ), )

try:
        writePlist(current_bex, 'someFile.plist') except TypeError:
        print 'caught typeerror'
结果:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>objectName</key>
    <string>myData</string>
    <key>objects</key>
    <array>
        <string>foo</string>
        <string>one</string>
    </array>
</dict>
</plist>
很好。显然我对dict()和list()的使用是不正确的?有人能解释一下吗?

这里有两件事:

  • list()
    构造函数不接受单个内容项作为参数,而是接受项的iterable。因此,您可以编写列表文字语法
    [1,2,3]
    ,但不能编写
    list(1,2,3)

  • dict是可编辑的,并将其键作为其值生成

  • 因此,如果从dict构造一个列表,结果将是dict键的列表,而不是包含dict的列表。这正是您在生成的plist中看到的

    >>> list(dict(one=1, foo='bar'))
    ['foo', 'one']
    
    >>> list(dict(one=1, foo='bar'))
    ['foo', 'one']