我对Python和编程很新。我的问题涉及通过这些操作我可以找到字典中包含最少元素的列表。要清楚我有一个包含大约十个键的字典,每个键都是一个包含大量元素的列表。 我需要用最少的元素迭代列表。为了找到它,我试图定义一个完成这项工作的函数:
def minlist(*lists):
smallest = min(len(lists))
if len(lists) == smallest:
return lists
但回复是TypeError: 'int' object is not iterable
。我怎么能管理它,请记住原则上我不知道键的数量?
这是我的字典样本(根据需要)
{97: [1007928679693166,
1007928798219684,
1007928814680980,
1007928891466688,
1007928897515544,
1007928997487142],
98: [1007928837651593, 1007928889730933],
99: [1007928797944536,
1007928805518205,
1007928870847877,
1007929012532919,
1007929030905896,
1007929097107140],
688: [1007928628309796,
1007928724910684,
1007928808626541,
1007928866265101,
1007928908312998,
1007928982161920,
1007929013746703,
1007929055652413],
734: [1007928687611100,
1007928923969018,
1007928933749030,
1007928942892766,
1007929021773704],
1764: [1007928765771998, 1007928917743164],
1765: [1007928894040229, 1007929021413611],
1773: [1007929003959617]}
答案 0 :(得分:2)
这是使用列表理解的更短版本:
min_list=min([len(ls) for ls in dict.values()])
编辑:这也可以使用生成器理解(围绕圆括号中的表达而不是方括号)来获得更高效的版本
答案 1 :(得分:1)
我想你想这样做:
def minlist(lists_dict):
min_list = None
for list in lists_dict.values():
if min_list == None:
min_list = list
else:
if len(list) < len(min_list):
min_list = list
return min_list
为什么lists_dict.values()
?
默认情况下,您遍历字典的键。但你想检查一下
相关值的长度=&gt;因此你必须使用它们。
我假设的字典结构如下:
# { int: list, int: list, ...}
# e.g.:
lists_dict = {1: [2,3], 2: [2,3,4,5], 3: [1], 4: [1,2,2]}
您描述的结构:
# { list: list, list: list, ...}
不起作用,您不能使用标准列表作为字典的键。
答案 2 :(得分:1)
这是一个使用中间元组列表以便于排序/访问的解决方案:
input_dict = {1: [1,2,3,4], 2: [2,3,4], 3:[1,2,3]}
#Get key/length(list) type tuples
helper = [(key, len(input_dict[key])) for key in input_dict.keys()]
#Sort list by the second element of the tuple(the length of the list)
helper.sort(key=lambda x: x[1])
#Now the first position hold the key to the shortest list from the dicitonary and the length
print input_dict[helper[0][0]]