<p>你需要两个环。每个键一个,每个键的列表值另一个。每次迭代都附加到新字典</p>
<pre><code>data = {'RDBMS' : [...]}
</code></pre>
<p/>
<pre><code>new_data = {}
for k in data:
for l in data[k]:
new_data.setdefault(l["driverKey"].split()[0], []).append(l)
</code></pre>
<p>或者,使用<code>defaultdict</code>:</p>
<pre><code>from collections import defaultdict
new_data = defaultdict(list)
for k in data:
for l in data[k]:
new_data[l["driverKey"].split()[0]].append(l)
</code></pre>
<p>defaultdict对于很多数据来说效率略高一些(不管每次是否必须创建和返回列表,<code>dict.setdefault</code>都不必要地创建和返回列表)</p>
<p>根据您的注释,外部循环不是必需的,但是编写在输入更改时不容易中断的代码总是很好的</p>
<p/>
<pre><code>print(new_data)
{
'PostgreSQL': [{
'userName': 'a',
'entityName': 'entity1',
'connectionString': 'DRIVER={PostgreSQL Unicode};DATABASE=database1;UID=uid1;PWD=password;SERVER=127.0.0.1;SID=null;PORT=5432;',
'databaseName': 'database1',
'driverKey': 'PostgreSQL Unicode'
}, {
'userName': 'b',
'entityName': 'entity2',
'connectionString': 'DRIVER={PostgreSQL Unicode};DATABASE=database1;UID=uid1;PWD=password;SERVER=127.0.0.1;SID=null;PORT=5432;',
'databaseName': 'database1',
'driverKey': 'PostgreSQL Unicode'
}],
'SQL': [{
'userName': 'a',
'entityName': 'entity3',
'connectionString': 'DRIVER={PostgreSQL Unicode};DATABASE=database1;UID=uid1;PWD=password;SERVER=127.0.0.1;SID=null;PORT=5432;',
'databaseName': 'database1',
'driverKey': 'SQL Server'
}]
}
</code></pre>