Min and Max of a list of Associations
up vote
10
down vote
favorite
I am trying to find the minimum values for all elements in a list of associations, below is an example
x = {<|"a"-> 4, "b"->9, "c"->15|>, <|"a"->21, "b"->11, "c"->1|>, <|"a"->12, "b"->3, "c"->21|>}
Required output for Min
{<|"a"-> 2, "b"->3, "c"->1|>}
Required output for Max
{<|"a"-> 21, "b"->11, "c"->15|>}
My attempt
for Max: MaximalBy[Values]@x
Result: {<|"a" -> 21, "b" -> 11, "c" -> 1|>}
for Min: MinimalBy[Values]@x
Result: {<|"a" -> 4, "b" -> 9, "c" -> 15|>}
Is there an elegant way to achieve this result?
list-manipulation associations
add a comment |
up vote
10
down vote
favorite
I am trying to find the minimum values for all elements in a list of associations, below is an example
x = {<|"a"-> 4, "b"->9, "c"->15|>, <|"a"->21, "b"->11, "c"->1|>, <|"a"->12, "b"->3, "c"->21|>}
Required output for Min
{<|"a"-> 2, "b"->3, "c"->1|>}
Required output for Max
{<|"a"-> 21, "b"->11, "c"->15|>}
My attempt
for Max: MaximalBy[Values]@x
Result: {<|"a" -> 21, "b" -> 11, "c" -> 1|>}
for Min: MinimalBy[Values]@x
Result: {<|"a" -> 4, "b" -> 9, "c" -> 15|>}
Is there an elegant way to achieve this result?
list-manipulation associations
1
I don't get it. How is the keya
getting the value2
? That value does not appear fora
in any of the associations. Similarly, why is the value ofc
not equal to21
in the maximal result?
– Shredderroy
Dec 7 at 6:30
add a comment |
up vote
10
down vote
favorite
up vote
10
down vote
favorite
I am trying to find the minimum values for all elements in a list of associations, below is an example
x = {<|"a"-> 4, "b"->9, "c"->15|>, <|"a"->21, "b"->11, "c"->1|>, <|"a"->12, "b"->3, "c"->21|>}
Required output for Min
{<|"a"-> 2, "b"->3, "c"->1|>}
Required output for Max
{<|"a"-> 21, "b"->11, "c"->15|>}
My attempt
for Max: MaximalBy[Values]@x
Result: {<|"a" -> 21, "b" -> 11, "c" -> 1|>}
for Min: MinimalBy[Values]@x
Result: {<|"a" -> 4, "b" -> 9, "c" -> 15|>}
Is there an elegant way to achieve this result?
list-manipulation associations
I am trying to find the minimum values for all elements in a list of associations, below is an example
x = {<|"a"-> 4, "b"->9, "c"->15|>, <|"a"->21, "b"->11, "c"->1|>, <|"a"->12, "b"->3, "c"->21|>}
Required output for Min
{<|"a"-> 2, "b"->3, "c"->1|>}
Required output for Max
{<|"a"-> 21, "b"->11, "c"->15|>}
My attempt
for Max: MaximalBy[Values]@x
Result: {<|"a" -> 21, "b" -> 11, "c" -> 1|>}
for Min: MinimalBy[Values]@x
Result: {<|"a" -> 4, "b" -> 9, "c" -> 15|>}
Is there an elegant way to achieve this result?
list-manipulation associations
list-manipulation associations
edited Dec 7 at 6:22
C. E.
49.3k395199
49.3k395199
asked Dec 7 at 5:39
Professor Williams
533
533
1
I don't get it. How is the keya
getting the value2
? That value does not appear fora
in any of the associations. Similarly, why is the value ofc
not equal to21
in the maximal result?
– Shredderroy
Dec 7 at 6:30
add a comment |
1
I don't get it. How is the keya
getting the value2
? That value does not appear fora
in any of the associations. Similarly, why is the value ofc
not equal to21
in the maximal result?
– Shredderroy
Dec 7 at 6:30
1
1
I don't get it. How is the key
a
getting the value 2
? That value does not appear for a
in any of the associations. Similarly, why is the value of c
not equal to 21
in the maximal result?– Shredderroy
Dec 7 at 6:30
I don't get it. How is the key
a
getting the value 2
? That value does not appear for a
in any of the associations. Similarly, why is the value of c
not equal to 21
in the maximal result?– Shredderroy
Dec 7 at 6:30
add a comment |
3 Answers
3
active
oldest
votes
up vote
13
down vote
accepted
How about
a = {
<|"a" -> 4, "b" -> 9, "c" -> 15|>,
<|"a" -> 21, "b" -> 11, "c" -> 1|>,
<|"a" -> 12, "b" -> 3, "c" -> 21|>
};
Merge[a, Min]
(*<|"a" -> 4, "b" -> 3, "c" -> 1|>*)
Merge[a, Max]
(*<|"a" -> 21, "b" -> 11, "c" -> 21|>*)
EDIT
Improved, as per Kuba's suggestion.
add a comment |
up vote
6
down vote
Random`Private`MapThreadMin[x]
Random`Private`MapThreadMax[x]
<|"a" -> 4, "b" -> 3, "c" -> 1|>
<|"a" -> 21, "b" -> 11, "c" -> 21|>
1
is there any list out there for these "hidden" commands? Or do you happen to have a favourite list that you can share with us?
– Soner
Dec 7 at 12:33
1
A good try is always?*
*` ;) Honestly, I learned this trick very recently from Carl Woll. Some other good place to look for such things is What are some useful undocumented Mathematica functions?
– Henrik Schumacher
Dec 7 at 13:45
Thanks, I am checking the link right now :)
– Soner
Dec 7 at 21:35
add a comment |
up vote
1
down vote
You may use Query
and MinMax
.
With x
as in OP.
Query[Transpose /* Map[MinMax]]@x
<|"a" -> {4, 21}, "b" -> {3, 11}, "c" -> {1, 21}|>
You can produce a more descriptive result with AssociationThread
.
res = Query[Transpose /* Map[AssociationThread[{"Min", "Max"}, MinMax@#] &]]@x
<|"a" -> <|"Min" -> 4, "Max" -> 21|>,
"b" -> <|"Min" -> 3, "Max" -> 11|>,
"c" -> <|"Min" -> 1, "Max" -> 21|>|>
Which you can then access by Key
with Association
's syntax sugar.
res["a", "Max"]
21
Hope this helps.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
});
});
}, "mathjax-editing");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "387"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f187472%2fmin-and-max-of-a-list-of-associations%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
13
down vote
accepted
How about
a = {
<|"a" -> 4, "b" -> 9, "c" -> 15|>,
<|"a" -> 21, "b" -> 11, "c" -> 1|>,
<|"a" -> 12, "b" -> 3, "c" -> 21|>
};
Merge[a, Min]
(*<|"a" -> 4, "b" -> 3, "c" -> 1|>*)
Merge[a, Max]
(*<|"a" -> 21, "b" -> 11, "c" -> 21|>*)
EDIT
Improved, as per Kuba's suggestion.
add a comment |
up vote
13
down vote
accepted
How about
a = {
<|"a" -> 4, "b" -> 9, "c" -> 15|>,
<|"a" -> 21, "b" -> 11, "c" -> 1|>,
<|"a" -> 12, "b" -> 3, "c" -> 21|>
};
Merge[a, Min]
(*<|"a" -> 4, "b" -> 3, "c" -> 1|>*)
Merge[a, Max]
(*<|"a" -> 21, "b" -> 11, "c" -> 21|>*)
EDIT
Improved, as per Kuba's suggestion.
add a comment |
up vote
13
down vote
accepted
up vote
13
down vote
accepted
How about
a = {
<|"a" -> 4, "b" -> 9, "c" -> 15|>,
<|"a" -> 21, "b" -> 11, "c" -> 1|>,
<|"a" -> 12, "b" -> 3, "c" -> 21|>
};
Merge[a, Min]
(*<|"a" -> 4, "b" -> 3, "c" -> 1|>*)
Merge[a, Max]
(*<|"a" -> 21, "b" -> 11, "c" -> 21|>*)
EDIT
Improved, as per Kuba's suggestion.
How about
a = {
<|"a" -> 4, "b" -> 9, "c" -> 15|>,
<|"a" -> 21, "b" -> 11, "c" -> 1|>,
<|"a" -> 12, "b" -> 3, "c" -> 21|>
};
Merge[a, Min]
(*<|"a" -> 4, "b" -> 3, "c" -> 1|>*)
Merge[a, Max]
(*<|"a" -> 21, "b" -> 11, "c" -> 21|>*)
EDIT
Improved, as per Kuba's suggestion.
edited Dec 7 at 8:30
answered Dec 7 at 6:22
Shredderroy
1,4931115
1,4931115
add a comment |
add a comment |
up vote
6
down vote
Random`Private`MapThreadMin[x]
Random`Private`MapThreadMax[x]
<|"a" -> 4, "b" -> 3, "c" -> 1|>
<|"a" -> 21, "b" -> 11, "c" -> 21|>
1
is there any list out there for these "hidden" commands? Or do you happen to have a favourite list that you can share with us?
– Soner
Dec 7 at 12:33
1
A good try is always?*
*` ;) Honestly, I learned this trick very recently from Carl Woll. Some other good place to look for such things is What are some useful undocumented Mathematica functions?
– Henrik Schumacher
Dec 7 at 13:45
Thanks, I am checking the link right now :)
– Soner
Dec 7 at 21:35
add a comment |
up vote
6
down vote
Random`Private`MapThreadMin[x]
Random`Private`MapThreadMax[x]
<|"a" -> 4, "b" -> 3, "c" -> 1|>
<|"a" -> 21, "b" -> 11, "c" -> 21|>
1
is there any list out there for these "hidden" commands? Or do you happen to have a favourite list that you can share with us?
– Soner
Dec 7 at 12:33
1
A good try is always?*
*` ;) Honestly, I learned this trick very recently from Carl Woll. Some other good place to look for such things is What are some useful undocumented Mathematica functions?
– Henrik Schumacher
Dec 7 at 13:45
Thanks, I am checking the link right now :)
– Soner
Dec 7 at 21:35
add a comment |
up vote
6
down vote
up vote
6
down vote
Random`Private`MapThreadMin[x]
Random`Private`MapThreadMax[x]
<|"a" -> 4, "b" -> 3, "c" -> 1|>
<|"a" -> 21, "b" -> 11, "c" -> 21|>
Random`Private`MapThreadMin[x]
Random`Private`MapThreadMax[x]
<|"a" -> 4, "b" -> 3, "c" -> 1|>
<|"a" -> 21, "b" -> 11, "c" -> 21|>
answered Dec 7 at 6:34
Henrik Schumacher
47.4k466134
47.4k466134
1
is there any list out there for these "hidden" commands? Or do you happen to have a favourite list that you can share with us?
– Soner
Dec 7 at 12:33
1
A good try is always?*
*` ;) Honestly, I learned this trick very recently from Carl Woll. Some other good place to look for such things is What are some useful undocumented Mathematica functions?
– Henrik Schumacher
Dec 7 at 13:45
Thanks, I am checking the link right now :)
– Soner
Dec 7 at 21:35
add a comment |
1
is there any list out there for these "hidden" commands? Or do you happen to have a favourite list that you can share with us?
– Soner
Dec 7 at 12:33
1
A good try is always?*
*` ;) Honestly, I learned this trick very recently from Carl Woll. Some other good place to look for such things is What are some useful undocumented Mathematica functions?
– Henrik Schumacher
Dec 7 at 13:45
Thanks, I am checking the link right now :)
– Soner
Dec 7 at 21:35
1
1
is there any list out there for these "hidden" commands? Or do you happen to have a favourite list that you can share with us?
– Soner
Dec 7 at 12:33
is there any list out there for these "hidden" commands? Or do you happen to have a favourite list that you can share with us?
– Soner
Dec 7 at 12:33
1
1
A good try is always
?*
*` ;) Honestly, I learned this trick very recently from Carl Woll. Some other good place to look for such things is What are some useful undocumented Mathematica functions?– Henrik Schumacher
Dec 7 at 13:45
A good try is always
?*
*` ;) Honestly, I learned this trick very recently from Carl Woll. Some other good place to look for such things is What are some useful undocumented Mathematica functions?– Henrik Schumacher
Dec 7 at 13:45
Thanks, I am checking the link right now :)
– Soner
Dec 7 at 21:35
Thanks, I am checking the link right now :)
– Soner
Dec 7 at 21:35
add a comment |
up vote
1
down vote
You may use Query
and MinMax
.
With x
as in OP.
Query[Transpose /* Map[MinMax]]@x
<|"a" -> {4, 21}, "b" -> {3, 11}, "c" -> {1, 21}|>
You can produce a more descriptive result with AssociationThread
.
res = Query[Transpose /* Map[AssociationThread[{"Min", "Max"}, MinMax@#] &]]@x
<|"a" -> <|"Min" -> 4, "Max" -> 21|>,
"b" -> <|"Min" -> 3, "Max" -> 11|>,
"c" -> <|"Min" -> 1, "Max" -> 21|>|>
Which you can then access by Key
with Association
's syntax sugar.
res["a", "Max"]
21
Hope this helps.
add a comment |
up vote
1
down vote
You may use Query
and MinMax
.
With x
as in OP.
Query[Transpose /* Map[MinMax]]@x
<|"a" -> {4, 21}, "b" -> {3, 11}, "c" -> {1, 21}|>
You can produce a more descriptive result with AssociationThread
.
res = Query[Transpose /* Map[AssociationThread[{"Min", "Max"}, MinMax@#] &]]@x
<|"a" -> <|"Min" -> 4, "Max" -> 21|>,
"b" -> <|"Min" -> 3, "Max" -> 11|>,
"c" -> <|"Min" -> 1, "Max" -> 21|>|>
Which you can then access by Key
with Association
's syntax sugar.
res["a", "Max"]
21
Hope this helps.
add a comment |
up vote
1
down vote
up vote
1
down vote
You may use Query
and MinMax
.
With x
as in OP.
Query[Transpose /* Map[MinMax]]@x
<|"a" -> {4, 21}, "b" -> {3, 11}, "c" -> {1, 21}|>
You can produce a more descriptive result with AssociationThread
.
res = Query[Transpose /* Map[AssociationThread[{"Min", "Max"}, MinMax@#] &]]@x
<|"a" -> <|"Min" -> 4, "Max" -> 21|>,
"b" -> <|"Min" -> 3, "Max" -> 11|>,
"c" -> <|"Min" -> 1, "Max" -> 21|>|>
Which you can then access by Key
with Association
's syntax sugar.
res["a", "Max"]
21
Hope this helps.
You may use Query
and MinMax
.
With x
as in OP.
Query[Transpose /* Map[MinMax]]@x
<|"a" -> {4, 21}, "b" -> {3, 11}, "c" -> {1, 21}|>
You can produce a more descriptive result with AssociationThread
.
res = Query[Transpose /* Map[AssociationThread[{"Min", "Max"}, MinMax@#] &]]@x
<|"a" -> <|"Min" -> 4, "Max" -> 21|>,
"b" -> <|"Min" -> 3, "Max" -> 11|>,
"c" -> <|"Min" -> 1, "Max" -> 21|>|>
Which you can then access by Key
with Association
's syntax sugar.
res["a", "Max"]
21
Hope this helps.
answered Dec 7 at 10:30
Edmund
25.5k330100
25.5k330100
add a comment |
add a comment |
Thanks for contributing an answer to Mathematica Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f187472%2fmin-and-max-of-a-list-of-associations%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
I don't get it. How is the key
a
getting the value2
? That value does not appear fora
in any of the associations. Similarly, why is the value ofc
not equal to21
in the maximal result?– Shredderroy
Dec 7 at 6:30