合并基于值的python字典

时间:2017-08-31 12:06:37

标签: python

我有以下字典的python列表:

list= [{'_id': 'EF25E6D', 'RecordSets': [{'Name': '@', 'TTL': '', 'Type': '', 'Value': 'ns1.netnames.net.'}]},{'_id': 'EF25E6D', 'RecordSets': [{'Name': '@', 'TTL': '', 'Type': '', 'Value': 'ns2.netnames.net.'}]},
{'_id': 'EF25E6D', 'RecordSets': [{'Name': '@', 'TTL': '', 'Type': '', 'Value': 'ns5.netnames.net.'}]},{'_id': 'EF25E6D', 'RecordSets': [{'Name': '@', 'TTL': '', 'Type': '', 'Value': 'ns6.netnames.net.'}]},
{'_id': '7E00EAC', 'RecordSets': [{'Name': '@', 'TTL': '', 'Type': '', 'Value': 'ns1.netnames.net.'}]},{'_id': '7E00EAC', 'RecordSets': [{'Name': '@', 'TTL': '', 'Type': '', 'Value': 'ns2.netnames.net.'}]},
{'_id': '7E00EAC', 'RecordSets': [{'Name': '@', 'TTL': '', 'Type': '', 'Value': 'ns5.netnames.net.'}]},{'_id': '7E00EAC', 'RecordSets': [{'Name': '@', 'TTL': '', 'Type': '', 'Value': 'ns6.netnames.net.'}]}]

如何对这些进行分组,以便获得唯一的_id和记录集列表?

非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

乍一看,这看起来像是collections.defaultdict的工作:

from collections import defaultdict
dd = defaultdict(list)
for item in records: # make sure your list is not named "list"; better use "records"!
    dd[item["id"]].append(item["RecordSets"])

结果是一个包含

的字典对象
{'7E00EAC': [[{'Name': '@',
    'TTL': '',
    'Type': '',
    'Value': 'ns1.netnames.net.'}],
  [{'Name': '@',
    'TTL': '',
    'Type': '',
    'Value': 'ns2.netnames.net.'}],
  [{'Name': '@',
    'TTL': '',
    'Type': '',
    'Value': 'ns5.netnames.net.'}],
  [{'Name': '@',
    'TTL': '',
    'Type': '',
    'Value': 'ns6.netnames.net.'}]],
 'EF25E6D': [[{'Name': '@',
    'TTL': '',
    'Type': '',
    'Value': 'ns1.netnames.net.'}],
  [{'Name': '@',
    'TTL': '',
    'Type': '',
    'Value': 'ns2.netnames.net.'}],
  [{'Name': '@',
    'TTL': '',
    'Type': '',
    'Value': 'ns5.netnames.net.'}],
  [{'Name': '@',
    'TTL': '',
    'Type': '',
    'Value': 'ns6.netnames.net.'}]]
}

如果您的所有记录集只有一个项目(如您的示例所示),请使用

    dd[item["id"]].append(item["RecordSets"][0])

避免不必要的嵌套列表。