[英]python - Getting key with second and third maximum value in dictionary
我有一个类似这样的JSON文件。
{
"b0:47:bf:af:c1:42":
{
"No. of visits": 10, "cities":
{
"Mumbai": {"count": 5,"last_visited": "5/22/2016"},
"Kolkata": {"count": 2,"last_visited": "5/22/2016"},
"Amritsar":{"count": 3,"last_visited": "5/22/2016"}
}
},
"c0:ee:fb:71:be:0d":
{
"No. of visits": 24, "cities":
{
"Mumbai": {"count": 2,"last_visited": "5/22/2016"},
"Kolkata": {"count": 20,"last_visited": "5/22/2016"},
"Amritsar":{"count": 2,"last_visited": "5/22/2016"}
}
}
}
现在,要获取用户访问的最大城市或每个密钥的密钥b0:47:bf:af:c1:42
,我目前将其解析为字典,然后使用它。
for mac in dic_data:
cities = dic_data[mac]['cities']
most_visited_city = max(cities, key=lambda x: cities[x]['count'])
但是如何获得第二个最大访问城市,第三个最大访问城市等等。 我正在使用python 2.7。
除了使用max
,还可以使用sorted
。
这样,您将获得基于count
的排序列表:
d = {
"b0:47:bf:af:c1:42":
{
"No. of visits": 10, "cities":
{
"Mumbai": {"count": 5,"last_visited": "5/22/2016"},
"Kolkata": {"count": 2,"last_visited": "5/22/2016"},
"Amritsar":{"count": 3,"last_visited": "5/22/2016"}
}
},
"c0:ee:fb:71:be:0d":
{
"No. of visits": 24, "cities":
{
"Mumbai": {"count": 2,"last_visited": "5/22/2016"},
"Kolkata": {"count": 20,"last_visited": "5/22/2016"},
"Amritsar":{"count": 2,"last_visited": "5/22/2016"}
}
}
}
for mac in d:
cities = d[mac]['cities']
sorted_cities = sorted(cities, key=lambda x: cities[x]['count'])
# or if you want the sort to be the other way around
reversed_sorted_cities = sorted(cities, key=lambda x: cities[x]['count'],
reverse=True)
print sorted_cities
>> ['Kolkata', 'Amritsar', 'Mumbai']
['Amritsar', 'Mumbai', 'Kolkata']
更新要获得您在注释中要求的输出:
d = { ... }
info = {}
for mac in d:
cities = d[mac]['cities']
info[mac] = sorted(cities, key=lambda x: cities[x]['count'])
print info
>> {'b0:47:bf:af:c1:42': ['Kolkata', 'Amritsar', 'Mumbai'],
'c0:ee:fb:71:be:0d': ['Mumbai', 'Amritsar', 'Kolkata']}
也可以使用字典理解功能在一行中完成:
info = {mac: sorted(d[mac]['cities'], key=lambda x: d[mac]['cities'][x]['count'])
for mac in d}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.