Julia 如何删除字典中各向量存储的跨键重复元素
Julia实现字典内跨向量重复值删除
实现逻辑
- 先统计字典中所有向量包含的元素的全局出现次数
- 提取出现次数大于1的元素作为待过滤集合
- 遍历字典每个键对应的向量,过滤掉属于待过滤集合的元素
无额外依赖实现代码
# 定义原始字典 x = Dict{AbstractString,Array{Integer,1}}("A" => [1,2,3], "B" => [3,4,5], "C" => [5,6,7]) # 统计所有元素出现频次 all_vals = reduce(vcat, values(x)) count_dict = Dict{Integer, Int}() for val in all_vals count_dict[val] = get(count_dict, val, 0) + 1 end # 生成待删除元素集合 duplicate_vals = Set{Integer}(k for (k, v) in count_dict if v > 1) # 生成结果字典 res = Dict{AbstractString, Vector{Integer}}() for (key, vec) in x res[key] = filter(num -> !(num in duplicate_vals), vec) end
运行验证结果
执行后输出res即可得到预期结果:
Dict{AbstractString, Vector{Integer}} with 3 entries: "A" => [1, 2] "B" => [4] "C" => [6, 7]
简洁写法(依赖StatsBase库)
如果允许引入第三方库,可以用StatsBase.countmap简化计数逻辑:
using StatsBase x = Dict{AbstractString,Array{Integer,1}}("A" => [1,2,3], "B" => [3,4,5], "C" => [5,6,7]) duplicate_vals = Set(k for (k, v) in countmap(reduce(vcat, values(x))) if v > 1) res = Dict(key => filter(!in(duplicate_vals), vec) for (key, vec) in x)
内容的提问来源于stack exchange,提问作者AfterFray
相关产品推荐
相关产品推荐

