Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较Python中dict列表中的值_Python_List_Dictionary_List Comparison - Fatal编程技术网

比较Python中dict列表中的值

比较Python中dict列表中的值,python,list,dictionary,list-comparison,Python,List,Dictionary,List Comparison,我是Python的新手。我有一个成员列表和一个会议列表(包含成员id): 其中,成员id和会议主机id的值相同 结果:没有会议的成员id列表['3']或DICT列表[{'id':'3','name':'Billy'}] 什么是最好的、可读性最好的方法?您可以构建一组主机,然后使用筛选出成员: member_list = [{'id': '1', 'name': 'Joe'}, {'id': '2', 'name': 'Jason'},

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

其中,成员id和会议主机id的值相同

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

什么是最好的、可读性最好的方法?

您可以构建一组主机,然后使用筛选出成员:

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'}]
['3']
对于仅id的输出,请执行以下操作:

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

[{'id': '3', 'name': 'Billy'}]
['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'}]
然后使用列表理解从每个dict列表中提取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

你是故意加下划线的吗?它是dicts的标准版本还是python的标准版本?@holly.woo是的。对于一般的python,使用dict列表有什么原因吗?您可以使用一个simpe dict,id作为键,name作为值。在你的情况下,它会更容易处理和阅读。除非每个成员都有更多的“属性”?你可以使用这样的dict:memberDict={1:'Joe',2:'Jason',3:'Billy'}。会议也是如此;我简化了结构以使其更易于理解,但对象更复杂,包含更多数据:)而且会议列表实际上是从API返回的,如果我只需要简单的值比较,我看不出对其进行操作的原因。会议列表类似于smt:{“uuid”:“xx”,“id”:“yy”,“主持人id”:“zz”,“主题”:“主题”,“类型”:“8”,“开始时间”:“2020-12-01T08:15:00Z”,“持续时间”:“30”,“时区”:“欧洲/柏林”,“创建时间”:“2020-11-10T13:46:38Z”,“加入url”:“}