根据查询数据创建键值对

时间:2016-02-19 09:18:15

标签: python django dictionary

对数据库的python查询

m = Request.objects.filter(type__contains='mega')

和基于m的查询集

x = m.values('set', 'value')

返回

之类的值
[{'value': u'sasi', 'set': u'ITEM1'}, {'value': u'babu', 'set': u'ITEM1'},{'value': u'unni', 'set': u'ITEM2'},...]

我打算根据数据创建一个字典。这就像

{'ITEM1': [sasi, babu], 'ITEM2':[unni], 'ITEM3': [x, y, z] , ....}

如何将上述查询集转换为此字典格式?伙计们好吗?提前致谢。

2 个答案:

答案 0 :(得分:4)

使用itertools.groupbydictionary comprehension

>>> data = [
...     {'value': u'sasi', 'set': u'ITEM1'},
...     {'value': u'babu', 'set': u'ITEM1'},
...     {'value': u'unni', 'set': u'ITEM2'},
...     {'value': u'x', 'set': u'ITEM3'},
...     {'value': u'y', 'set': u'ITEM3'},
...     {'value': u'z', 'set': u'ITEM3'},
... ]
>>> 
>>> data = sorted(data, key=lambda d: d['set'])
>>> import itertools
>>> {key: list(d['value'] for d in grp)
...  for key, grp in itertools.groupby(data, key=lambda d: d['set'])}
{u'ITEM2': [u'unni'], u'ITEM3': [u'x', u'y', u'z'], u'ITEM1': [u'sasi', u'babu']}

如果查询集按sorted排序,则可以跳过set来电。

答案 1 :(得分:1)

from collections import defaultdict
data = defaultdict(list)
for item in x:
    data[item['set']].append(item['value'])