<p>这可能不是最有效的方法,但是。。。在</p>
<pre><code>import pprint
data = [{"name":"item.key" , "value":"value"},
{"name":"item.key2" , "value":"value2"},
{"name":"item.list.0" , "value":"listValue1"},
{"name":"item.list.1" , "value":"listValue2"},
{"name":"item.list.2" , "value":"listValue3"},
{"name":"item.list2.0.key1" , "value":"list2Key1Value"},
{"name":"item.list2.0.key2" , "value":"list2Key2Value"},
{"name":"item.list2.0.key3" , "value":"list2Key3Value"},
{"name":"item.list3.0.key1" , "value":"list3Key1Value"},
{"name":"item.list3.0.key2" , "value":"list3Key2Value"},
{"name":"item.list3.0.key3" , "value":"list3Key3Value"},
{"name":"other.key" , "value":"otherKeyValue"}]
obj = {}
def addObj(o, path, value):
if len(path) > 1:
o = o.setdefault(path.pop(0), {})
addObj(o, path, value)
else:
o[path.pop(0)] = value
for item in data:
parts = item['name'].split(".")
addObj(obj, parts, item['value'])
# this function assumes all keys are strings
def convert(obj):
if isinstance(obj, dict):
if all(key.isdigit() for key in obj.keys()):
return [convert(obj[key])
for key in sorted(obj.keys(), key=int)]
return dict((key, convert(value)) for key, value in obj.items())
return obj
pprint.pprint(convert(obj))
</code></pre>
<p>生成以下输出:</p>
^{pr2}$