【问题标题】:Python: Reducing a List in a DictionaryPython:减少字典中的列表
【发布时间】:2014-05-16 02:31:06
【问题描述】:

我希望这很容易。我有一本字典:

 { 
      'key1': 'value1',
      'key2': 'value2',
      'key3': 'value3'
 },
 { 
      'key1': 'value4',
      'key2': 'value5',
      'key3': 'value6'
 },

我怎样才能将其减少为以下内容:

 { 'key1': ['value1', 'value4'], 'key2': ['value2', 'value5'], 'key3': ['value3', 'value6'] }

非常感谢!

【问题讨论】:

标签: python


【解决方案1】:

像这样:

from collections import defaultdict

d1 = { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3' } 
d2 = { 'key1': 'value4', 'key2': 'value5', 'key3': 'value6' }

dout = defaultdict(list)
for item in d1:
    dout[item].append(d1[item])
for item in d2:
    dout[item].append(d2[item])
print dout

【讨论】:

    【解决方案2】:

    这适用于具有相同键的两个 dicts 的情况:

    a = { 
      'key1': 'value1',
      'key2': 'value2',
      'key3': 'value3'
    }
    
    b = { 
    'key1': 'value4',
    'key2': 'value5',
    'key3': 'value6'
    }
    
    c= {k: [a[k], b[k]] for k in a.keys()}
    

    【讨论】:

      【解决方案3】:

      像这样 -

      vals = [{ 'key1': 'value1', 'key2': 'value2', 'key3': 'value3' }, {  'key1': 'value4', 'key2': 'value5', 'key3': 'value6' }]
      
      d = {}
      for k,v in [(k,v) for item in vals for k,v in item.items()]:
          d[k] = d[k] + [v] if d.get(k) else [v]
      
      
      #>>> d
      #{'key3': ['value3', 'value6'], 'key2': ['value2', 'value5'], 'key1': ['value1', 'value4']}
      

      【讨论】:

        【解决方案4】:

        将字典列表转换为具有值列表的字典

        from itertools import chain
        result = {}
        data = [
            {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'},
            {'key1': 'value4', 'key2': 'value5', 'key3': 'value6'},
        ]
        
        list_of_tuples = chain(*[x.items() for x in data])
        for k, v in list_of_tuples:
          result.setdefault(k, []).append(v)
        
        print(result)
        

        输出:

        > python app.py
        {'key3': ['value3', 'value6'], 'key2': ['value2', 'value5'], 'key1': ['value1', 'value4']}
        

        【讨论】:

          猜你喜欢
          • 2021-03-03
          • 1970-01-01
          • 1970-01-01
          • 2014-06-11
          • 2017-07-16
          • 2020-04-03
          • 2021-09-07
          • 2021-12-30
          • 2020-05-07
          相关资源
          最近更新 更多