【问题标题】:Python convert dict of lists to dict of sets?Python将列表的字典转换为集合的字典?
【发布时间】:2018-10-07 20:59:35
【问题描述】:

我有:

myDict = {'a': [1,2,3], 'b':[4,5,6], 'c':[7,8,9]}

我想要:

myDict = {'a': set([1,2,3]), 'b':set([4,5,6]), 'c':set([7,8,9])}

我可以使用单行代码来执行此操作,而不是循环遍历它并转换值的类型吗?

【问题讨论】:

  • myDict = {k: set(v) for k, v in myDict.items()},几乎需要迭代
  • 一个班轮将循环通过它...

标签: python dictionary set


【解决方案1】:

无论如何你都必须循环:

{key: set(value) for key, value in yourData.items()}

如果您使用的是 Python 3.6+,您也可以这样做:

dict(zip(myDict.keys(), map(set, myDict.values())))

【讨论】:

  • 我喜欢拉链,我也展示了地图,但我并没有想到拉链
  • @ForceBru 是否有任何情况不适用于 3.6 之前的 Python 版本?
  • 为什么我们应该更喜欢 zip 版本而不是理解?
  • @Nae,不需要更喜欢zip 版本:如果理解看起来更清晰、更易读,那么使用理解
【解决方案2】:

这可以通过 map 将值映射到类型 set 来完成

myDict = dict(map(lambda x: (x[0], set(x[1])), myDict.items()))

或者也可以使用任一版本的字典理解

myDict = {k: set(v) for k, v in myDict.items()}
myDict = {k: set(myDict[k]) for k in myDict}

【讨论】:

    【解决方案3】:

    您可以对其使用理解:

    基本上,循环遍历键值对并为对应键的每个值创建集合。

    >>> myDict = {'a': [1,2,3], 'b':[4,5,6], 'c':[7,8,9]}
    >>> myDict = {k: set(v) for k, v in myDict.items()}
    >>> myDict
    {'a': {1, 2, 3}, 'b': {4, 5, 6}, 'c': {8, 9, 7}}
    

    【讨论】:

    • 为帮助读者理解您的解决方案,请考虑包含对您的代码的简短描述以及它如何解决发布的问题
    • 谢谢@HenryWoody。我添加了描述!
    【解决方案4】:

    无论如何,你不能不循环,但你可以在一行中完成循环,使用以下代码:

    myDict = {k:set(v) for k, v in myDict.items()}
    

    这基本上是遍历字典中的每个项目并将列表转换为集合并将 key(str):value(set) 对组合到新字典并将其分配回 myDict 变量。

    【讨论】:

    • 为帮助读者理解您的解决方案,请考虑包含对您的代码的简短描述以及它如何解决发布的问题
    猜你喜欢
    • 1970-01-01
    • 2015-07-23
    • 2022-11-12
    • 2019-02-10
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    相关资源
    最近更新 更多