假设我们有一个像这样的字典:
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/