我遇到了一种情况,我想先按值对地图进行排序,如果值相等,然后在 GO 中按键排序。这是输入和预期输出的示例。
import "fmt"
func main() {
wordFrequency := map[string]int{"banana": 3, "america": 2, "abb": 2, "test": 2, "car": 1}
fmt.Printf("%v", wordFrequency)
}
预期输出:{“香蕉”:3,“abb”:2,“美国”:2,“测试”:2,“汽车”:1}
这里的banana是第一个,因为它的值是3。abb和america的值都是2,但是abb排在第一位,按升序排列。所以我的问题是如何实现这种行为,我们首先按值对映射中的条目进行排序,如果值等于我们按键对它们进行排序。我检查了相关文档和以前的问题,但没有一个直接解决这种情况。如果由于 Go 中的 map 数据结构而无法做到这一点,我们如何使用其他结构有效地做到这一点?
在 Python 3 中,我们可以通过以下方式做到这一点
>>> d = {'apple':2, 'banana':3, 'almond':2, 'beetroot':3, 'peach':4}
>>> [k for k, v in sorted(d.iteritems(), key=lambda(k, v): (-v, k))]
['peach', 'banana', 'beetroot', 'almond', 'apple']
这是 Python 链接的等效问题的链接
注意:这个问题询问如何按值对地图进行排序。我的问题是特定于按值排序,然后按键(如果值等于)。
HUX布斯
相关分类