【问题标题】:Is there a way to convert a list of dicts to a set of dicts?有没有办法将字典列表转换为一组字典?
【发布时间】:2020-06-22 12:47:14
【问题描述】:

我想将一个字典列表转换为一组字典。

例如:

我有以下列表:

my_list = [{k1:v1, k2:v2}, {k3:v3, k4:v4}]

我只是想轻松地将其转换为一组这些字典。

只要我的列表包含像字符串这样的简单数据,就没有问题:

new_list = set(myList)

但如果他们持有 dicts,他们就会跌倒

TypeError: unhashable type: 'dict'

我宁愿不迭代列表并将每个项目添加到集合中。 我宁愿有一个直接的方法,它也将支持例如字符串列表。

这可能吗?

【问题讨论】:

  • 您不能拥有一组字典,原因是(正如您自己注意到的)字典不可散列。这是set 对象的唯一要求,而其他数据类型中的字典不满足此要求。
  • 简单地删除重复的列表项。起初只有字符串列表,但现在我还必须处理 dict 列表,我希望两者都可以有一个通用的解决方案。
  • 这能回答你的问题吗? Remove duplicate dict in list in Python
  • 您可能会发现这个答案非常有用stackoverflow.com/questions/2703599/what-would-a-frozen-dict-be

标签: python python-3.x


【解决方案1】:

由于错误表明集合中的元素必须是可散列的,这意味着必须具有唯一的 id(由 hash method 给出)。您可以创建自己的 dict 扩展类,为 dict 提供哈希,例如其所有键的哈希。或者在将其转换为集合之前测试/过滤您的列表。简而言之,集合不能包含字典。

【讨论】:

    【解决方案2】:

    Python 没有内置的“frozendict”类型。如果您真的想模拟frozendict 会做什么,那么您可能想要存储一个与dict 等效的哈希值。例如:

    my_list = [{k1:v1, k2:v2}, {k3:v3, k4:v4}]
    
    my_set = set(frozenset(d.items()) for d in my_lst)
    

    如果你想找回你的听写,你需要做的就是:

    my_list = list(map(dict, my_set))
    

    【讨论】:

      猜你喜欢
      • 2020-03-11
      • 2013-04-01
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多