Tengo un diccionario ordenado con cierto número de entradas:
dict = {B:3, A:2, C:2, D:1, E:0, F:0...}¿Hay alguna forma de filtrar el diccionario para encontrar las entradas con los 3 valores más altos mientras se consideran los valores duplicados para que la salida sea? :
output = {B:3, A:2, C:2, D:1}Gracias por leer..
Puede contar valores distintos con un Set y filtrar entradas ordenadas para obtener un objeto de él.
const object = { B: 3, A: 2, C: 2, D: 1, E: 0, F: 0 }, result = Object.fromEntries(Object .entries(object) .sort(([, a], [, b]) => b - a) // just to be sure .filter((s => ([, v]) => s.add(v).size <= 3)(new Set)) ); console.log(result);Tal vez esto pueda ayudarle.
var dict = { B: 3, A: 2, C: 2, D: 1, E: 0, F: 0 }; // Create items array var items = Object.keys(dict).map(function(key) { return [key, dict[key]]; }); // Sort the array based on the second element items.sort(function(first, second) { return second[1] - first[1]; }); // Create a new array with only the first 3 items let slicedArray = items.slice(0, 3); //Return appropriate value let dictSorted = slicedArray.reduce((a, x) => ({ ...a, [x[0]]: x[1] }), {}); console.log(dictSorted);