如何将dict_values转换为集合

时间:2017-08-18 09:38:08

标签: python-3.x list set

我有一个dict,其中包含每个键的值,例如

{'key1': {8772, 9605},'key2': {10867, 10911, 10917},'key3': {11749,11750},'key4': {14721, 19755, 21281}}

现在我想将每个值,即int的集合放入set,我想知道最好的方法/最有效的方法是什么。

{8772,9605,10867,10911,10917,11749,11750,14721,19755,21281}

我尝试使用dictdict.values()检索值,但是返回dict_values个对象,将其作为列表,list(dict.values())给了我一个集合列表,set(list(exact_dups.values()))告诉我错误,

TypeError: unhashable type: 'set'

更新。忘了提到结果集也需要保持唯一性,即没有重复。

7 个答案:

答案 0 :(得分:5)

您可以使用set.union()和解压缩的值执行此操作:

set.union(*my_dict.values())

或者您可以将set.union()reduce结合使用:

reduce(set.union, my_dict.values())

答案 1 :(得分:3)

使用reduceset union的组合:

from functools import reduce

result = reduce(lambda a, b: a.union(b), my_dict.values(), set())
print(result)

答案 2 :(得分:2)

使用set union运算符(|,“或”)进行序列缩减将执行:

from functools import reduce
from operator import or_

d = {'key1': {8772, 9605},'key2': {10867, 10911, 10917},'key3': {11749,11750},'key4': {14721, 19755, 21281}}
s = reduce(or_, d.values())

它基本上是d['key1'] | d['key2'] | ...

答案 3 :(得分:2)

简单可读不言自明解决方案,无任何导入:

arr = []
for key in dictionary:
    arr += list(dictionary[key])

answer = set(arr.sorted())

答案 4 :(得分:0)

更简单的方法

set1 = set()
for i in dict.values():
    set1.update(i)
set1

答案 5 :(得分:0)

您可以尝试这种方式:

keys_set= set()
for item in dict.values():
    keys_set.add(item)

答案 6 :(得分:0)

我们只能访问 OP 想要的值,然后按如下方式对其进行排序:

dict1 = {'key1': {8772, 9605},'key2': {10867, 10911, 10917},'key3': {11749,11750},'key4': {14721, 19755, 21281}}

arr = []
for key in sorted(dict1.values()):
    arr += key


print('{', ','.join(str(n) for n in arr), '}', sep='')

产生,

{8772,9605,10867,10917,10911,11749,11750,14721,19755,21281}

[Program finished]

根据 OP 的要求。