如果字典中的键值具有共同的键值对,那么如何合并这些键值? [英] How to merge key values within dictionaries if they have a common key-value pair?

查看:130
本文介绍了如果字典中的键值具有共同的键值对,那么如何合并这些键值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个字典列表,

list = [
    {'hostname': 'a', 'ipaddr':'abcde'},
    {'hostname': 'a', 'ipaddr':'fghijkl'},
    {'hostname': 'a', 'ipaddr':'bbbbbb'},
    {'hostname': 'b', 'ipaddr':'xxxx'}
]

如何使输出看起来像这样:

How do I make it so that the output looks like this:

outputList = [
    {
        'hostname': 'a',
        'ipaddr': ['abcde', 'fghijkl', 'bbbbbb']
    },
    {
        'hostname': 'b',
        'ipaddr':'xxxx'
    }
]


修改:在执行此步骤之前,我已经过滤了选定主机名的JSON列表


Edit: Before this step, I have filtered a JSON list of selected hostnames

['hostname1', 'hostname2', 'hostname3', 'hostname4' ......]

然后,给定一个庞大的JSON字典列表(以上称为列表"),我必须筛选出各自的主机名和ipaddress,最好根据主机名进行分组,以便可以在其他地方轻松解析它.

Then, given a huge JSON list of dictionaries (called "list" above), I have to sieve out the respective hostnames and ipaddresses, preferably grouped according to hostnames so that I can parse it elsewhere easily.

推荐答案

这是一种方法:

inputList = [
    {'hostname': 'a', 'ipaddr':'abcde'},
    {'hostname': 'a', 'ipaddr':'fghijkl'},
    {'hostname': 'a', 'ipaddr':'bbbbbb'},
    {'hostname': 'b', 'ipaddr':'xxxx'}
]

outputList = {}
for d in inputList:
    od = outputList.setdefault(d['hostname'], {})
    od.setdefault('hostname', d['hostname'])
    od.setdefault('ipaddr', []).append(d['ipaddr'])
outputList = sorted(outputList.values(), key=lambda x: x['hostname'])

assert outputList == [
    {
        'hostname': 'a',
        'ipaddr': ['abcde', 'fghijkl', 'bbbbbb']
    },
    {
        'hostname': 'b',
        'ipaddr':['xxxx']
    }
]

这篇关于如果字典中的键值具有共同的键值对,那么如何合并这些键值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆