按键从两个不同的列表生成列表

2024-09-29 19:38:04 发布

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

考虑到以下结构:

myObj1 = [{"id":1, "name":"john"},
          {"id":2, "name":"roger"},
          {"id":3, "name":"carlos"}]
myObj2 = [{"group": "myGroup1","persons":[1, 2, 3]},
          {"group": "myGroup2", "persons":[2]},
          {"group": "myGroup3", "persons":[1,3]}]

我想得到以下结果:

result = [{"group": "myGroup1","persons":[{"id":1, "name":"john"},
                                          {"id":2, "name":"roger"},
                                          {"id":3, "name":"carlos"}]},
          {"group": "myGroup2", "persons":[{"id":2, "name":"roger"}]},
          {"group": "myGroup3", "persons":[{"id":1, "name":"john"},
                                           {"id":3, "name":"carlos"}]}]

挑战是用“persons”数组中的每个值替换id匹配的整个myObj1项值。你知道吗

我可以用3个for来实现这一点,但我想知道是否有一个python的方法来实现这一点,使用插值、映射、过滤器、集合等等。。我知道python这个词,但是一个面试官问了我这个问题,他告诉我应该用1-2行代码来完成。你知道吗

更新: 以下是我的新手方法:

for item in myObj1:
    id = item["id"]
    for item2 in myObj2:
        for i in range(len(item2["persons"])):        
            if item2["persons"][i] == id:
                item2["persons"][i] = item

Tags: nameinidforgroupitemjohncarlos
3条回答

你可以试试这个:

myObj1 = [{"id":1, "name":"john"},
      {"id":2, "name":"roger"},
      {"id":3, "name":"carlos"}]
myObj2 = [{"group": "myGroup1","persons":[1, 2, 3]},
      {"group": "myGroup2", "persons":[2]},
      {"group": "myGroup3", "persons":[1,3]}]
final_dict = [{a:b if a != "persons" else c for a,b in d.items()} for c, d in zip(myObj1, myObj2)]

输出:

[{'persons': {'id': 1, 'name': 'john'}, 'group': 'myGroup1'}, {'persons': {'id': 2, 'name': 'roger'}, 'group': 'myGroup2'}, {'persons': {'id': 3, 'name': 'carlos'}, 'group': 'myGroup3'}]

以下内容如何:

result = [dict(x) for x in myObj2]

for grp in result:
    grp["persons"] = [p for p in myObj1 if p["id"] in grp["persons"]]

我们创建一个新列表(使用dict(x) to ensure we don't retain references to the elements ofmyObj2`),然后相应地更新。你知道吗

result = myObj2.copy()
for d in result:
    d['persons'] = [[j for j in myObj1 if j['id']==i][0] for i in d['persons']]

result

输出:

[{'group': 'myGroup1',
  'persons': [{'id': 1, 'name': 'john'},
   {'id': 2, 'name': 'roger'},
   {'id': 3, 'name': 'carlos'}]},
 {'group': 'myGroup2', 'persons': [{'id': 2, 'name': 'roger'}]},
 {'group': 'myGroup3',
  'persons': [{'id': 1, 'name': 'john'}, {'id': 3, 'name': 'carlos'}]}]

相关问题 更多 >

    热门问题