我有一个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}
我尝试使用dict
从dict.values()
检索值,但是返回dict_values
个对象,将其作为列表,list(dict.values())
给了我一个集合列表,set(list(exact_dups.values()))
告诉我错误,
TypeError: unhashable type: 'set'
更新。忘了提到结果集也需要保持唯一性,即没有重复。
答案 0 :(得分:5)
您可以使用set.union()
和解压缩的值执行此操作:
set.union(*my_dict.values())
或者您可以将set.union()
与reduce
结合使用:
reduce(set.union, my_dict.values())
答案 1 :(得分:3)
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 的要求。