假设我有一个字典列表:foo = [
{'host': 'localhost', 'db_name': 'test', 'table': 'partners'},
{'host': 'localhost', 'db_name': 'test', 'table': 'users'},
{'host': 'localhost', 'db_name': 'test', 'table': 'sales'},
{'host': 'localhost', 'db_name': 'new', 'table': 'partners'},
{'host': 'localhost', 'db_name': 'new', 'table': 'users'},
{'host': 'localhost', 'db_name': 'new', 'table': 'sales'},
]
如何将这个列表分割成单独的列表(或列表),其中“主机”和“dByNeX”是相同的?
例如:
list1 = [
{'host': 'localhost', 'db_name': 'test', 'table': 'partners'},
{'host': 'localhost', 'db_name': 'test', 'table': 'users'},
{'host': 'localhost', 'db_name': 'test', 'table': 'sales'},
]
list2 = [
{'host': 'localhost', 'db_name': 'new', 'table': 'partners'},
{'host': 'localhost', 'db_name': 'new', 'table': 'users'},
{'host': 'localhost', 'db_name': 'new', 'table': 'sales'},
]
最佳答案
>>> from collections import defaultdict
>>> dd = defaultdict(list)
>>> foo = [
{'host': 'localhost', 'db_name': 'test', 'table': 'partners'},
{'host': 'localhost', 'db_name': 'test', 'table': 'users'},
{'host': 'localhost', 'db_name': 'test', 'table': 'sales'},
{'host': 'localhost', 'db_name': 'new', 'table': 'partners'},
{'host': 'localhost', 'db_name': 'new', 'table': 'users'},
{'host': 'localhost', 'db_name': 'new', 'table': 'sales'},
]
>>> for d in foo:
dd[(d['host'], d['db_name'])].append(d)
列表列表是字典的值
>>> dd.values()
[[{'table': 'partners', 'host': 'localhost', 'db_name': 'new'}, {'table': 'users', 'host': 'localhost', 'db_name': 'new'}, {'table': 'sales', 'host': 'localhost', 'db_name': 'new'}], [{'table': 'partners', 'host': 'localhost', 'db_name': 'test'}, {'table': 'users', 'host': 'localhost', 'db_name': 'test'}, {'table': 'sales', 'host': 'localhost', 'db_name': 'test'}]]