将Python个字典插入另一个字典,生成.plist文件?
Insert Python dictionary into another dictionary, to generate .plist file?
我正在尝试使用 plistlib
库生成一个 .plist 文件,在 macOS Python 2.7 中可用。
以下代码有效:
#!/usr/bin/env python
from plistlib import writePlist
patches = [
{
'Arch': 'x86_64',
'Base': 'early'
},
{
'Arch': 'x86_64',
'Base': 'late'
}
]
result = [
{
'Arch': 'x86_64',
'BundlePath': 'Alpha.kext'
},
{
'Arch': 'x86_64',
'BundlePath': 'Beta.kext'
}
]
for i in patches:
result.append(dict(i))
settings = {
'Kernel': {
'Add': result
}
}
writePlist(settings, 'config.plist')
并生成一个 config.plist
文件,其内容为:
<?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>Kernel</key>
<dict>
<key>Add</key>
<array>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>Alpha.kext</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>Beta.kext</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>early</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>late</string>
</dict>
</array>
</dict>
</dict>
</plist>
但是,我的 config.plist
需要在另一个词典中包含 patches
个词典:
<dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>early</string>
正确的配置文件必须如下所示(请参阅编辑器中的第 21 和 22 行):
<?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>Kernel</key>
<dict>
<key>Add</key>
<array>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>Alpha.kext</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>Beta.kext</string>
</dict>
<dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>early</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>late</string>
</dict>
</dict>
</array>
</dict>
</dict>
</plist>
如何编辑我的 setup.py
文件以生成正确的 dictionary inside dictionary
输出?如果你想知道为什么我拆分代码,是因为这是一种非常简化的格式,实际代码相当复杂。因此,我需要一个在上述代码设计中的解决方案。感谢您的帮助。
所需的输出看起来不正确。你的“字典的字典”没有钥匙。我怀疑应该是这样的
<dict>
<key>Patches</key>
<array>
<dict>
<key>Arch</key>
...
</dict>
<dict>
<key>Arch</key>
...
</dict>
</array>
</dict>
如果是这样,这里是你如何做到这一点,使用“补丁”键。
patches = [
{
'Arch': 'x86_64',
'Base': 'early'
},
{
'Arch': 'x86_64',
'Base': 'late'
}
]
result = [
{
'Arch': 'x86_64',
'BundlePath': 'Alpha.kext'
},
{
'Arch': 'x86_64',
'BundlePath': 'Beta.kext'
}
]
result.append({"Patches": patches})
settings = {
'Kernel': {
'Add': result
}
}
writePlist(settings, 'config.plist')
输出
<?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>Kernel</key>
<dict>
<key>Add</key>
<array>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>Alpha.kext</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>Beta.kext</string>
</dict>
<dict>
<key>Patches</key>
<array>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>early</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>late</string>
</dict>
</array>
</dict>
</array>
</dict>
</dict>
</plist>
我正在尝试使用 plistlib
库生成一个 .plist 文件,在 macOS Python 2.7 中可用。
以下代码有效:
#!/usr/bin/env python
from plistlib import writePlist
patches = [
{
'Arch': 'x86_64',
'Base': 'early'
},
{
'Arch': 'x86_64',
'Base': 'late'
}
]
result = [
{
'Arch': 'x86_64',
'BundlePath': 'Alpha.kext'
},
{
'Arch': 'x86_64',
'BundlePath': 'Beta.kext'
}
]
for i in patches:
result.append(dict(i))
settings = {
'Kernel': {
'Add': result
}
}
writePlist(settings, 'config.plist')
并生成一个 config.plist
文件,其内容为:
<?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>Kernel</key>
<dict>
<key>Add</key>
<array>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>Alpha.kext</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>Beta.kext</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>early</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>late</string>
</dict>
</array>
</dict>
</dict>
</plist>
但是,我的 config.plist
需要在另一个词典中包含 patches
个词典:
<dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>early</string>
正确的配置文件必须如下所示(请参阅编辑器中的第 21 和 22 行):
<?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>Kernel</key>
<dict>
<key>Add</key>
<array>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>Alpha.kext</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>Beta.kext</string>
</dict>
<dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>early</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>late</string>
</dict>
</dict>
</array>
</dict>
</dict>
</plist>
如何编辑我的 setup.py
文件以生成正确的 dictionary inside dictionary
输出?如果你想知道为什么我拆分代码,是因为这是一种非常简化的格式,实际代码相当复杂。因此,我需要一个在上述代码设计中的解决方案。感谢您的帮助。
所需的输出看起来不正确。你的“字典的字典”没有钥匙。我怀疑应该是这样的
<dict>
<key>Patches</key>
<array>
<dict>
<key>Arch</key>
...
</dict>
<dict>
<key>Arch</key>
...
</dict>
</array>
</dict>
如果是这样,这里是你如何做到这一点,使用“补丁”键。
patches = [
{
'Arch': 'x86_64',
'Base': 'early'
},
{
'Arch': 'x86_64',
'Base': 'late'
}
]
result = [
{
'Arch': 'x86_64',
'BundlePath': 'Alpha.kext'
},
{
'Arch': 'x86_64',
'BundlePath': 'Beta.kext'
}
]
result.append({"Patches": patches})
settings = {
'Kernel': {
'Add': result
}
}
writePlist(settings, 'config.plist')
输出
<?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>Kernel</key>
<dict>
<key>Add</key>
<array>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>Alpha.kext</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>BundlePath</key>
<string>Beta.kext</string>
</dict>
<dict>
<key>Patches</key>
<array>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>early</string>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>late</string>
</dict>
</array>
</dict>
</array>
</dict>
</dict>
</plist>