Python plistlib:没有正确嵌套?

Posted

技术标签:

【中文标题】Python plistlib:没有正确嵌套?【英文标题】:Python plistlib: not nesting properly? 【发布时间】:2011-09-20 18:51:10 【问题描述】:

我的代码:

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>

我的问题是,为什么在嵌套数组中,我有简单的字符串,而不是foobar等?

编辑:

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

工作正常。显然我对 dict() 和 list() 的使用不正确?有人能解释一下吗?

【问题讨论】:

【参考方案1】:

这里有两件事:

    list() 构造函数不将单个内容项作为参数,它需要一个可迭代的项。所以你可以写列表文字语法[1, 2, 3],但不能写list(1, 2, 3)

    一个 dict 是可迭代的,并产生它的键作为它的值。

所以,如果你从 dict 构造一个列表,结果将是 dict 的键列表,而不是包含 dict 的列表。这正是您在生成的 plist 中看到的内容。

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

【讨论】:

以上是关于Python plistlib:没有正确嵌套?的主要内容,如果未能解决你的问题,请参考以下文章

Vue Router 嵌套路由没有路由正确的组件

使用 python 访问嵌套的 JSON

Python v2嵌套子类“全局名称” ' 没有定义”

有没有办法在 gcloud-python 中保存嵌套实体?

嵌套的 ScrollViews 无法正确显示

iOS嵌套的UIScrollViews没有响应