【问题标题】:Merge identical format dictionaries into one dictionary [duplicate]将相同格式的字典合并到一个字典中[重复]
【发布时间】:2015-04-15 07:46:39
【问题描述】:

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

商品应按原产地订购。

我怎样才能用 Python 优雅地做到这一点

当前数据格式

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

预期结果

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

【问题讨论】:

  • 你有没有尝试过?有用吗?
  • 我看不出这个问题是如何与另一个问题重复的。

标签: python dictionary


【解决方案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]})

【讨论】:

    【解决方案2】:

    来自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])]
    

    【讨论】:

      【解决方案3】:

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

      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]}
      

      【讨论】:

        【解决方案4】:
        >>> 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]}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-04
          • 1970-01-01
          • 2019-09-18
          • 1970-01-01
          • 2019-05-16
          • 2017-11-27
          • 2012-05-20
          • 2019-06-04
          相关资源
          最近更新 更多