如何合并lis中的对象

2024-09-19 23:29:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Flask设置一些restapi,我有一个同名对象的列表,但有些字段是不同的,我如何将所有同名对象和其他字段合并?你知道吗

servers_list = [{ "name": "server1", 
                  "ip": "192.168.1.1", 
                  "alias": "PRNA" }, 
                { "name": "server1", 
                  "ip": "192.168.1.2", 
                  "alias": "PRNA" }, 
                { "name": "server1", 
                  "ip": "192.168.1.1", 
                  "alias": "SLKE" }]

如您所见,有3台服务器具有相同的名称,但2台服务器具有不同的IP,1台服务器具有不同的别名,我希望得到一个对象:

{
  "name": "server1",
  "ip": ["192.168.1.1", "192,168.1.2"],
  "alias": ["PRNA", "SLKE"]
}

我怎么能在Python或熊猫身上感受到呢? 谢谢


Tags: 对象nameip服务器名称restapiflask列表
3条回答

这将创建新的合并词典。你知道吗

servers_list = [{ "name": "server1", "ip": "192.168.1.1", "alias": "PRNA" }, { "name": "server1", "ip": "192.168.1.2", "alias": "PRNA" }, { "name": "server1", "ip": "192.168.1.1", "alias": "SLKE" }]


dict={}
for ser in servers_list:
    for key in (ser):
        if key in dict:
            if ser[key] not in dict[key]:
                dict[key].append(ser[key])
        else:
            dict[key]=[ser[key]]
print(dict)
merged = dict()

for entry in server_list:
   if entry['name'] not in merged:
       entry['ip'] = [entry['ip']] # convert to list
       merged[entry['name']] = entry
   else: # if name is a duplicate
      merged[entry['name']]['ip'].append(entry['ip']) # add the ip

这段代码合并了IP,您也可以将其扩展到别名。你知道吗

你可以这样做与列表理解和pd.concat公司地址:

servers_list = [{ "name": "server1", 
                  "ip": "192.168.1.1", 
                  "alias": "PRNA" }, 
                { "name": "server1", 
                  "ip": "192.168.1.2", 
                   "alias": "PRNA" }, 
                { "name": "server1", 
                  "ip": "192.168.1.1", 
                  "alias": "SLKE" }]

pd.concat([pd.DataFrame(i, index=[0]) for i in servers_list])\
  .groupby('name')\
  .agg(lambda x: x.unique().tolist())\
  .reset_index().to_dict(orient='records')

输出:

[{'name': 'server1',
  'ip': ['192.168.1.1', '192.168.1.2'],
  'alias': ['PRNA', 'SLKE']}]

相关问题 更多 >