获取字典中大多数项目的键的最快方法?
Fastest way to get key with most items in a dictionary?
我正在尝试找到最快的方法来获取包含最多项目的字典键。目前我尝试过的两种方法是:
def get_key_with_most_items(d):
maxcount = max(len(v) for v in d.values())
return [k for k, v in d.items() if len(v) == maxcount][0]
和
def sort_by_values_len(dict):
dict_len = {key: len(value) for key, value in dict.items()}
import operator
sorted_key_list = sorted(dict_len.items(), key=operator.itemgetter(1), reverse=True)
sorted_dict = [{item[0]: dict[item [0]]} for item in sorted_key_list]
return sorted_dict
第一种方法 return 具有最多项的键,而第二种方法 return 将整个字典作为列表。就我而言,为了清楚起见,我只需要钥匙。以这种方式比较这些方法后:
start_time = time.time()
for i in range(1000000):
get_key_with_most_items(my_dict) # sort_by_values_len(my_dict)
print("Time", (time.time() - start_time))
我得出的结论是 get_key_with_most_items
方法快了将近 50%,时间分别为 15.68 秒和 8.06 秒。谁能推荐(如果可能的话)更快的东西?
解决方法非常简单:
max(d, key=lambda x: len(d[x]))
解释:
- 字典在迭代时只是一组键。
max(some_dictionary)
将占用最多的键
max
可选择接受比较函数 (key
)。要按项目数量比较字典键,内置 len
就可以完成工作。
使用d.items()
获取键和值的序列。然后从值的长度中得到最大值。
def get_key_with_most_items(d):
maxitem = max(d.items(), key = lambda item: len(item[1]))
return maxitem[0]
对于最大函数:
max(d, key=lambda k: len(d[k]))
如果你想对字典进行排序,那么使用OrderedDict。我认为从技术上讲,您的代码仍然可以与常规字典一起使用,但这是基于 Python 字典的当前实现的技术问题 - 在过去,常规字典没有可靠的顺序,将来可能不会。
例如,您可以将此作为一个衬里来将您的字典变成按值长度排序的字典:
from collections import OrderedDict
ordered_dict = OrderedDict(sorted(d.items(), key=lambda t: len(t[1])))
我正在尝试找到最快的方法来获取包含最多项目的字典键。目前我尝试过的两种方法是:
def get_key_with_most_items(d):
maxcount = max(len(v) for v in d.values())
return [k for k, v in d.items() if len(v) == maxcount][0]
和
def sort_by_values_len(dict):
dict_len = {key: len(value) for key, value in dict.items()}
import operator
sorted_key_list = sorted(dict_len.items(), key=operator.itemgetter(1), reverse=True)
sorted_dict = [{item[0]: dict[item [0]]} for item in sorted_key_list]
return sorted_dict
第一种方法 return 具有最多项的键,而第二种方法 return 将整个字典作为列表。就我而言,为了清楚起见,我只需要钥匙。以这种方式比较这些方法后:
start_time = time.time()
for i in range(1000000):
get_key_with_most_items(my_dict) # sort_by_values_len(my_dict)
print("Time", (time.time() - start_time))
我得出的结论是 get_key_with_most_items
方法快了将近 50%,时间分别为 15.68 秒和 8.06 秒。谁能推荐(如果可能的话)更快的东西?
解决方法非常简单:
max(d, key=lambda x: len(d[x]))
解释:
- 字典在迭代时只是一组键。
max(some_dictionary)
将占用最多的键 max
可选择接受比较函数 (key
)。要按项目数量比较字典键,内置len
就可以完成工作。
使用d.items()
获取键和值的序列。然后从值的长度中得到最大值。
def get_key_with_most_items(d):
maxitem = max(d.items(), key = lambda item: len(item[1]))
return maxitem[0]
对于最大函数:
max(d, key=lambda k: len(d[k]))
如果你想对字典进行排序,那么使用OrderedDict。我认为从技术上讲,您的代码仍然可以与常规字典一起使用,但这是基于 Python 字典的当前实现的技术问题 - 在过去,常规字典没有可靠的顺序,将来可能不会。
例如,您可以将此作为一个衬里来将您的字典变成按值长度排序的字典:
from collections import OrderedDict
ordered_dict = OrderedDict(sorted(d.items(), key=lambda t: len(t[1])))