1

我是 Python 的新手。我有一个成员列表和一个会议列表(包含成员 ID):

memberList = [{'id': '1', 'name': 'Joe'},
{'id': '2', 'name': 'Jason'},
{'id': '3', 'name': 'Billy'}]

meetingList = [{'meetingId': '20', 'hostId' : '1'},
{'meetingId': '21', 'hostId' : '1'},
{'meetingId': '22', 'hostId' : '2'},
{'meetingId': '23', 'hostId' : '2'}]

其中成员的 id 和会议的 hostId 是相同的值。

结果:没有会议的成员ID['3']列表或字典列表[{'id': '3', 'name': 'Billy'}]

最好和最易读的方法是什么?

4

2 回答 2

2

您可以构建一主机,然后使用列表推导过滤掉成员:

member_list = [{'id': '1', 'name': 'Joe'},
               {'id': '2', 'name': 'Jason'},
               {'id': '3', 'name': 'Billy'}]

meeting_list = [{'meetingId': '20', 'hostId': '1'},
                {'meetingId': '21', 'hostId': '1'},
                {'meetingId': '22', 'hostId': '2'},
                {'meetingId': '23', 'hostId': '2'}]

# create a set of hosts
hosts = set(meeting['hostId'] for meeting in meeting_list)  # or { meeting['hostId'] for meeting in meeting_list }

# filter out the members that are in hosts
res = [member['id'] for member in member_list if member['id'] not in hosts]
print(res)

输出

[{'id': '3', 'name': 'Billy'}]

对于仅id输出,请执行以下操作:

res = [member['id'] for member in member_list if member['id'] not in hosts]
print(res)

输出

['3']
于 2020-11-30T10:23:56.477 回答
0

我会从两个字典列表中提取 id 并直接比较它们。

首先,我只是重写您的列表变量以将它们分配给=. 使用:不会保存变量。

memberList = [{'id': '1', 'name': 'Joe'},
              {'id': '2', 'name': 'Jason'},
              {'id': '3', 'name': 'Billy'}]

meetingList = [{'meetingId': '20', 'hostId' : '1'},
               {'meetingId': '21', 'hostId' : '1'},
               {'meetingId': '22', 'hostId' : '2'},
               {'meetingId': '23', 'hostId' : '2'}]

然后使用列表推导从每个字典列表中提取 id。

member_id_list = [i["id"] for i in memberList]
meeting_hostid_list = [i["hostId"] for i in meetingList]

你也可以在这里使用列表推导,但如果你不熟悉它,这个 for 循环和 if 逻辑将打印出任何不是主机的成员 ID。

for i in member_id_list:
    if i not in meeting_hostid_list:
        print(i)

>> 3
于 2020-11-30T10:37:56.840 回答