Nested groups with duplicate keys trivially do not work, even with VDFDict
Input file demo.vdf:
"controller_mappings"
{
"group"
{
"id" "0"
}
"group"
{
"id" "1"
}
}
Test script:
import vdf
with open("demo.vdf") as fp:
v = vdf.load(fp, mapper=vdf.VDFDict)
print(type(v))
print(type(v['controller_mappings']))
print(vdf.dumps(v, pretty=True))
Expected output: (demo.vdf)
Actual output:
<class 'vdf.vdict.VDFDict'>
<class 'vdf.vdict.VDFDict'>
"controller_mappings"
{
"group"
{
"id" "0"
"id" "1"
}
}
Not only is this incorrect, but no error is thrown: the resulting data structure is silently malformed and passed along.
Did you try setting merge_duplicate_keys=False ? The default behaviour is to merge duplicate keys.
See https://github.com/ValvePython/vdf/blob/d76292623e326fb165fe3bdb684832cdf30959d4/vdf/init.py#L77-L79
Since this has been open for quite a while, and I've also come across this. It seems that merge_duplicate_keys only applies when loading a file, not when dumping it. If you want to preserve key order but remove duplicates in a dump, you'll have to use collections.OrderedDict as the mapper when loading the file.