比较 Python 中字典列表中的值
Compare values in list of dicts in Python
我是 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'}]
最好和最易读的方法是什么?
您可以构建一个 set of hosts and then use a list comprehension 来过滤成员:
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']
我会从两个字典列表中提取出 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
我是 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'}]
最好和最易读的方法是什么?
您可以构建一个 set of hosts and then use a list comprehension 来过滤成员:
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']
我会从两个字典列表中提取出 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