Python plistlib: неправильное вложение? - PullRequest
1 голос
/ 20 сентября 2011

Мой код:

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>

Мой вопрос: почему во вложенном массиве у меня есть простые строки, а не foo bar и т. Д.?

EDIT:

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

отлично работает. Видимо мое использование dict () и list () неверно? Кто-нибудь может пролить свет на это?

1 Ответ

0 голосов
/ 22 июня 2016

Здесь есть две вещи:

  1. Конструктор list() не принимает отдельные элементы содержимого в качестве аргументов, он принимает итерируемые элементы.Таким образом, вы можете написать буквальный синтаксис списка [1, 2, 3], но не list(1, 2, 3).

  2. Диктовка является итеративной и возвращает ключи в качестве значений.

Итак, если вы строите список из dict, результатом будет список ключей dict, а не список, содержащий dict.Это именно то, что вы видите в полученном списке.

>>> list(dict(one=1, foo='bar'))
['foo', 'one']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...