我有一个词典列表,
$.ajax()
如何制作以使输出如下所示:
list = [
{'hostname': 'a', 'ipaddr':'abcde'},
{'hostname': 'a', 'ipaddr':'fghijkl'},
{'hostname': 'a', 'ipaddr':'bbbbbb'},
{'hostname': 'b', 'ipaddr':'xxxx'}
]
修改: 在此步骤之前,我已经过滤了所选主机名的JSON列表
outputList = [
{
'hostname': 'a',
'ipaddr': ['abcde', 'fghijkl', 'bbbbbb']
},
{
'hostname': 'b',
'ipaddr':'xxxx'
}
]
然后,给定一个巨大的JSON字典列表(上面称为“列表”),我必须筛选出相应的主机名和ipaddresses,最好根据主机名分组,以便我可以轻松地在其他地方解析它。
答案 0 :(得分:1)
lists = [
{'hostname': 'a', 'ipaddr':'abcde'},
{'hostname': 'a', 'ipaddr':'fghijkl'},
{'hostname': 'a', 'ipaddr':'bbbbbb'},
{'hostname': 'b', 'ipaddr':'xxxx'}
]
hostnames = set([d['hostname'] for d in lists])
outputlist= list()
for hostname in hostnames:
od = {
'hostname': hostname,
'ipaddr': []
}
for d in lists:
if d['hostname'] == hostname:
od['ipaddr'].append(d['ipaddr'])
outputlist.append(od)
此解决方案假定lists
中的所有词典都包含密钥'hostname'
。
答案 1 :(得分:1)
这是一种方式:
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']
}
]
答案 2 :(得分:0)
您可以使用以下代码:
list_1 = [
{'hostname': 'a', 'ipaddr':'abcde'},
{'hostname': 'a', 'ipaddr':'fghijkl'},
{'hostname': 'a', 'ipaddr':'bbbbbb'},
{'hostname': 'b', 'ipaddr':'xxxx'}
]
out_list = []
for each_dict in list_1:
if out_list:
for out_dict in out_list:
if out_dict['hostname']==each_dict['hostname']:
out_dict['ipaddr'].append(each_dict['ipaddr'])
else:
temp_dict = {}
temp_dict['hostname']=each_dict['hostname']
temp_dict['ipaddr']=[each_dict['ipaddr'],]
out_list.append(temp_dict)
else:
temp_dict = {}
temp_dict['hostname']=each_dict['hostname']
temp_dict['ipaddr']=[each_dict['ipaddr'],]
out_list.append(temp_dict)
print out_list
答案 3 :(得分:0)
from collections import defaultdict
lst = [
{'hostname': 'a', 'ipaddr':'abcde'},
{'hostname': 'a', 'ipaddr':'fghijkl'},
{'hostname': 'a', 'ipaddr':'bbbbbb'},
{'hostname': 'b', 'ipaddr':'xxxx'}
]
d = defaultdict(list)
for item in lst:
d[item['hostname']].append(item['ipaddr'])
output = [dict(zip(['hostname', 'ipaddr'], item)) for item in d.items()]