如何循环获取字典中元素最多的列表的键并移除该列表?
我来帮你搞定这个问题!首先得说,你之前把字典的键和值分开存数组的做法有点绕,其实直接操作字典的items()方法就能轻松拿到最长列表对应的键,而且还能实现循环移除的需求。
先给你纠正下之前代码里的小问题:你写的max([len(i) in array_values])语法不对,而且就算改对了也只能拿到最长列表的长度,没法关联回对应的键。咱们换个更直接的方式:
第一步:单次获取最长列表的键
首先别用dict当变量名哦,这会覆盖Python的内置类型,咱们改成my_dict:
my_dict = {'a': [1,5,4], 'b': [4], 'c': [1,5,4,3,8], 'd': [1,4]}
然后用max()函数的key参数,直接对键值对按列表长度排序,取最长的那个键:
longest_key = max(my_dict.items(), key=lambda item: len(item[1]))[0] print(longest_key) # 会输出 'c'
这里的lambda item: len(item[1])是告诉max():每个键值对(比如('c', [1,5,4,3,8])),我要按它第二个元素(也就是列表)的长度来比大小,max()会返回整个键值对,最后取[0]就是对应的键啦。
第二步:循环获取并移除最长列表
如果要循环做这个操作,直到字典里的键值对都被处理完,用while循环就行:
my_dict = {'a': [1,5,4], 'b': [4], 'c': [1,5,4,3,8], 'd': [1,4]} while my_dict: # 找到当前最长列表的键 longest_key = max(my_dict.items(), key=lambda item: len(item[1]))[0] print(f"当前最长列表的键: {longest_key}") # 移除这个键值对 del my_dict[longest_key]
运行这段代码,输出会是:
当前最长列表的键: c 当前最长列表的键: a 当前最长列表的键: d 当前最长列表的键: b
完美符合你的需求:每次找出当前最长的,移除后继续循环。
内容的提问来源于stack exchange,提问作者digs_ef
相关产品推荐
相关产品推荐

