Python将字典的值列表转换为集合字典?

3
我有: 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])} 是否有一种一行代码的方法可以实现这个,而不是循环遍历并转换值的类型?

2
myDict = {k: set(v) for k, v in myDict.items()} 迭代是必需的。 - user3483203
2
这个一行代码也将通过它进行循环... - jonrsharpe
4个回答

8

无论如何,您都需要循环迭代:

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

如果你使用的是Python 3.6或更高版本,也可以这样做:
dict(zip(myDict.keys(), map(set, myDict.values())))

1
我喜欢压缩,我也选择了地图显示,但压缩没有在我的考虑范围内。 - vash_the_stampede
@ForceBru 在Python 3.6以下的版本中是否存在无法运行的情况? - Manuel Jacob
1
我们为什么应该更喜欢使用zip版本而不是列表推导式呢? - Nae
1
@Nae,不必更喜欢'zip'版本:如果推导式看起来更干净、更可读,请使用推导式。 - ForceBru

1

无论如何都需要使用循环,但是你可以使用以下代码在一行中完成循环:

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

这基本上是遍历字典中的每个项目,将列表转换为集合,并将键(str):值(set)对组合成一个新的字典,然后将其重新分配给myDict变量。

为了帮助读者理解您的解决方案,请考虑包括一段简短的描述,介绍您的代码是如何解决所发布问题的。 - Henry Woody

1
你可以使用推导式来实现:
基本上,循环遍历键值对,并为相应的键创建每个值的集合。
>>> 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}}

为了帮助读者理解您的解决方案,请考虑包括一段简短的描述,介绍您的代码是如何解决所发布问题的。 - Henry Woody
谢谢@HenryWoody。我已经添加了描述! - mayurmadnani

1

这可以通过使用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}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接