给出列表
list = [("a", 1), ("a", 2), ("b", 3)]
如何将其归类为以下代码? 有内置功能(可以使用稍微不同的形式)吗?
[
[("a", 1), ("a", 2)]
[("b", 3)]
]
可能带有类似
的内容group((symbol, value) -> symbol, list)
答案 0 :(得分:0)
使用DataFrames.jl
:
julia> using DataFrames
julia> list = [(rand('a':'e'), rand(0:9)) for j in 1:8 ]
8-element Array{Tuple{Char,Int64},1}:
('b', 4)
('b', 4)
('d', 4)
('e', 8)
('b', 2)
('c', 4)
('c', 3)
('b', 5)
julia> df = DataFrame(letter = first.(list), number = map(t -> t[2], list));
julia> gp = groupby(df, :letter);
julia> [[(r.letter, r.number) for r in eachrow(gdf)] for gdf in gp]
4-element Array{Array{Tuple{Char,Int64},1},1}:
[('b', 4), ('b', 4), ('b', 2), ('b', 5)]
[('d', 4)]
[('e', 8)]
[('c', 4), ('c', 3)]
如果您的数据量很大,则可能需要JuliaDB.jl
答案 1 :(得分:0)
标准库没有这种功能,最终我自己写了
groupby(f, list::Array) = begin
foldl(list; init = Dict()) do dict, v
push!(get!(dict, f(v), []), v)
dict
end
end
最好在标准库中包含它