将相同格式的词典合并为一个词典

时间:2015-04-15 07:46:40

标签: python dictionary

我想将当前数据格式转换为预期结果

这些物品应作为原产地订购。

我怎样才能以优雅的方式使用Python

当前数据格式

[{'_id': 1800, 'count': 32},
 .....
 {'_id': 1892, 'count': 1},
 {'_id': 1899, 'count': 13}]

预期结果

 {"_id":[1800,1892,1899], "count":[32,1,13]}

4 个答案:

答案 0 :(得分:1)

使用defaultdict

尝试此操作
from collections import defaultdict
l = [{'_id': 1800, 'count': 32},
 {'_id': 1892, 'count': 1},
 {'_id': 1899, 'count': 13}]

d = defaultdict(list)
for i in l:
    for j,k in i.items():
        d[j].append(k)

>>>d
defaultdict(<type 'list'>, {'count': [32, 1, 13], '_id': [1800, 1892, 1899]})

使用Counter

from collections import Counter

l = [{i:[j] for i,j in d.items()} for d in l]
result_counter = Counter()
for i in l:
    result_counter.update(i)

>>>result_counter
Counter({'_id': [1800, 1892, 1899], 'count': [32, 1, 13]})

答案 1 :(得分:1)

来自python collections docs:

>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
...     d[k].append(v)
...
>>> d.items()
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

答案 2 :(得分:1)

您可以简单地遍历列表并构建所需的字典。

In [2]: l = [{'_id': 1800, 'count': 32}, {'_id': 1892, 'count': 1}, {'_id': 1899, 'count': 13}]

In [3]: {'_id': [data['_id'] for data in l], 'count': [data['count'] for data in l]}
Out[3]: {'_id': [1800, 1892, 1899], 'count': [32, 1, 13]}

答案 3 :(得分:0)

>>> data
[{'count': 32, '_id': 1800}, {'count': 1, '_id': 1892}, {'count': 13, '_id': 1899}]
>>> result = {key:[] for key in data[0]}
>>> for d in data:
...     for k in d:
...         result[k].append(d[k])
... 
>>> result
{'count': [32, 1, 13], '_id': [1800, 1892, 1899]}