Python plistlib:没有正确嵌套?

时间:2011-09-20 18:51:11

标签: 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 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>

我的问题是,为什么在嵌套数组中,我有简单的字符串,而不是&lt; key&gt; foo&lt; / key&gt;&lt; string&gt; bar&lt; / string&gt;等?

编辑:

current_bex = dict(
    objectName = 'myData',
    objects = [
        {
            'one': 1,
            'foo': 'bar',
        },
        {
            'something': 'goes here',
        },
    ],
)

工作正常。显然我对dict()和list()的使用是不正确的?有人能说清楚这个吗?

1 个答案:

答案 0 :(得分:0)

这里有两件事:

  1. list()构造函数不会将单个内容项作为参数,而是需要一个可迭代的项。因此,您可以编写列表文字语法[1, 2, 3],但不能编写list(1, 2, 3)

  2. dict是可迭代的,并将其键作为其值。

  3. 因此,如果您从dict构造一个列表,结果将是dict的键列表,而不是包含dict的列表。这正是你在最终的plist中所看到的。

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