假设我们有一个像这样的字典:

os_stats = {
    ('USA', 'Mac OS X'): 1,
    ('Mexico', 'iOS'): 3,
    ('USA', 'Windows XP'): 2,
    ('Germany', 'Windows 7'): 9,
    ('Germany', 'Windows XP'): 7,
    ('Mexico', 'Windows XP'): 2,
    ...
}


我想要这样的输出:

os_preferences = {
     ('Mexico', 'iOS'): 3,
     ('USA', 'Windows XP'): 2,
     ('Germany', 'Windows 7'): 9,
      ...
}


仅显示每个国家/地区的最高价值。
我该如何实现?

最佳答案

此dict理解做到了:

{country:{os:count} for (country,os),count in sorted(os_stats.items(), key=lambda rec:rec[1])}


第一部分是这样的:

sorted(os_stats.items(), key=lambda rec:rec[1])


产生:

[(('USA', 'Mac OS X'), 1),
 (('Mexico', 'Windows XP'), 2),
 (('USA', 'Windows XP'), 2),
 (('Mexico', 'iOS'), 3),
 (('Germany', 'Windows XP'), 7),
 (('Germany', 'Windows 7'), 9)]


请注意,它是按计数字段(rec[1])的升序排序的。

其余的只是将数据按摩到单个dict中,其效果是通过覆盖较小的值(与较大的值一起覆盖)来丢弃它们。

关于python - 获取字典中每个键对(n0,a),(n0,b)具有最大值的键对(n0,_),(n1,_),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37234299/

10-10 03:17