python - 如何将列表列表转换为 python 中的集合,以便我可以与其他集合进行比较?

标签 python list set

我有一个列表 users_with_invites_ids_list,由循环形成,我将值附加到列表,在 python 中看起来像这样:

...[ObjectId('55119e14bf2e4e010d8b48f2')], [ObjectId('54624128bf2e4e5e558b5a52')], [ObjectId('53a6e7bc763f4aa0308b4569')], [ObjectId('55241823bf2e4e59508b494c')]]

当我尝试时:

    users_with_invites_ids_set = set(users_with_invites_ids_list)

我得到:

TypeError: unhashable type: 'list'

如何将这个列表列表转换为集合?

编辑

根据回答,我做了以下事情:

#convert list to set
first_tuple_list = [tuple(lst) for lst in users_with_invites_ids_list]
users_with_invites_ids_set = set(first_tuple_list)

产生以下结果:

 (ObjectId('542ac5a6763f4a82188b4a51'),), (ObjectId('54496fe6bf2e4efe348bd344'),), (ObjectId('54c96339bf2e4ee62c8b48e0'),)])

如何在没有 () 的情况下获取每个 ObjectId。这让我无法将这组 ID 与其他组的 ID 进行比较。

最佳答案

您需要将内部列表转换为元组,假设每个 ObjectId('55119e14bf2e4e010d8b48f2') 都是可哈希的:

users_with_invites_ids_set = set(tuple(x) for x in users_with_invites_ids_list)

工作示例:

>>> class ObjectId(object):
...   def __init__(self, v):
...     self.v = v
... 
>>> list_of_lists = [[ObjectId('55119e14bf2e4e010d8b48f2')], [ObjectId('54624128bf2e4e5e558b5a52')], [ObjectId('53a6e7bc763f4aa0308b4569')], [ObjectId('55241823bf2e4e59508b494c')]]
>>> set(tuple(x) for x in list_of_lists)
set([(<__main__.ObjectId object at 0x7f71483cfc50>,), (<__main__.ObjectId object at 0x7f71483cfd10>,), (<__main__.ObjectId object at 0x7f71483cfcd0>,), (<__main__.ObjectId object at 0x7f71483cfc90>,)])

如果您希望单独创建一组 ObjectId,您可以这样做:

>>> set(x for lst in list_of_lists for x in lst)
set([<__main__.ObjectId object at 0x7f71483cfb10>, <__main__.ObjectId object at 0x7f71483db050>, <__main__.ObjectId object at 0x7f71483cfad0>, <__main__.ObjectId object at 0x7f71483cfd50>])

关于python - 如何将列表列表转换为 python 中的集合,以便我可以与其他集合进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30083947/

相关文章:

python - 从对象列表中删除对象

java - 当每个元素上发生多个操作时,使用 forEach 清理列表迭代

bash - 在 Bash 中,您可以设置 -x 以启用调试,有没有办法知道脚本中是否已设置?

c++ - 有效修改用作键的集合元素的最安全方法

python - 无法在 django 中提供 mp3 文件

python - 使用 qt 将绘图添加到选项卡

python - 应用引擎 : Maintaining DataStore Consistency When Creating Records

python - 如何使用 Vosk 离线语音识别(或任何其他快速离线语音识别器)为虚拟助手设置唤醒词

c++ - 自定义有序集给出 "invalid operator<"的查找(...)

java - 将 double 添加到 ArrayList