【问题标题】:How to combine the list of dictionaries using values of the key?如何使用键的值组合字典列表?
【发布时间】:2022-01-11 16:14:50
【问题描述】:

输入:

      values = [{'priority': 'P2', 'subdomain': 'SD2', 'test': '2653'},
               {'priority': 'P3', 'subdomain': 'SD1', 'test': '2656'},
               {'priority': 'P2', 'subdomain': 'SD2', 'test': '2651'},
               {'priority': 'P2', 'subdomain': 'SD2', 'test': '2652'},
               {'priority': 'P3', 'subdomain': 'SD1', 'test': '2655'}]

应转换为:

      values = [{'priority': 'P2', 'subdomain': 'SD2', 'test': '2653,2651,2652'},
                {'priority': 'P3', 'subdomain': 'SD1', 'test': '2656,2655'}]

key 的值不固定,会根据用户的需要而变化。

我试过了:

result_dict["test"] = values[0]["test"]
final_output = []

I = 1
for value in range(len(values)):

    print("value", value)


    for j in range(I, len(values)):
           print("j", j)

           I = I+1
           if values[value]["priority"] == values[j]["priority"] \
                and values[value]["subdomain"] == values[j]["subdomain"]:
              final_output = []
              result_dict["priority"] = values[value]["priority"]
              result_dict["subdomain"] = values[value]["subdomain"]
              result_dict["test"] = result_dict["test"]+","+values[j]["test"]
              count = count +1

             
              
              final_output.append(result_dict)
              print(final_output)

请帮帮我。

【问题讨论】:

  • 您真的希望'test' 是一个字符串,例如'2653,2651,2652',而不是一个列表[2653,2651,2652]['2653','2651','2652']

标签: python arrays list sorting dictionary


【解决方案1】:

遍历列表并构建一个新字典:

def combine_dict_rows(values):

    result = {}
    for row in values:
        if row['priority'] not in result:
            result[row['priority']] = {}
        if row['subdomain'] not in result[row['priority']]:
            result[row['priority']][row['subdomain']] = []
        result[row['priority']][row['subdomain']].append(row['test'])
    return result

values = [{'priority': 'P2', 'subdomain': 'SD2', 'test': '2653'},
               {'priority': 'P3', 'subdomain': 'SD1', 'test': '2656'},
               {'priority': 'P2', 'subdomain': 'SD2', 'test': '2651'},
               {'priority': 'P2', 'subdomain': 'SD2', 'test': '2652'},
               {'priority': 'P3', 'subdomain': 'SD1', 'test': '2655'}]

 print(combine_dict_rows(values))

输出:

{'P2': {'SD2': ['2653', '2651', '2652']}, 'P3': {'SD1': ['2656', '2655']}}

【讨论】:

    【解决方案2】:

    您可以使用groupby 并使用相同的键进行排序:

    from itertools import groupby 
    
    def key_func(d, keys=['priority', 'subdomain']):
        return [d.get(key, "") for key in keys]
    
    new_li=[]   
    for k,v in groupby(sorted(values, key=key_func), key=key_func):
        vals=list(v)
        di=vals[0]
        di['test']=','.join(d['test'] for d in vals)
        # di['test']=[d['test'] for d in vals] if you want a list
        new_li.append(di)
    
    >>> new_li
    [{'priority': 'P2', 'subdomain': 'SD2', 'test': '2653,2651,2652'}, {'priority': 'P3', 'subdomain': 'SD1', 'test': '2656,2655'}]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      • 1970-01-01
      • 2018-01-20
      • 2021-07-26
      相关资源
      最近更新 更多