【发布时间】:2021-03-11 21:01:45
【问题描述】:
我有一个集合列表,我试图在集合中找到与大多数项目一起使用的项目——不是最常见的一个或出现在大多数集合中的那个,而是那个“相互作用”的大多数项目。
集合列表示例:
food = [{'avocado', 'banana', 'coffee'}, {'avocado', 'donuts'}, {'coffee', 'licorice'}]
应该返回交互次数最多的项目,如果有更多具有相同值的项目,它应该返回按字母顺序排在第一位的项目,在这种情况下:avocado
我已经成功创建了一个字典,其中项目作为键,它们对应的“交互”作为值。按最大值对字典进行排序(嗯,对列表进行排序),最后通过索引所述列表中的第一个元素来获得具有最多“交互”的项目。
def goes_with_most(food):
food_type = {}
for mixture in food:
for stuff in mixture:
if stuff not in food_type:
food_type[stuff] = len(mixture) - 1 #the number of interactions
else: food_type[stuff] += (len(mixture) - 1)
max_value_ls = sorted(food_type.items(), key=lambda stuff: (-stuff [1], stuff[0]))
return max_value_ls[0][0] #returns the first item with the highest value
当然有更清洁的解决方案,非常感谢提示!
【问题讨论】:
-
“互动”是什么意思? “x 与 y 相互作用”是否应该意味着“x 和 y 一起出现在一个集合中”?
-
@user2357112supportsMonica 这是 x 满足任何给定变量的时间。
-
如果 x 和 y 一起出现在 two 集中,这算两次,还是只算一次互动?
-
确实,我假设您的意思是,如果您有
{'advocado', 'coffee', 'banana'}和{'advocado', 'banana', 'chocolate'},则'advocado'与其他 3 种成分“相互作用”:'banana'、'chocolate'和 @987654328 @,所以三种成分。您的代码将'banana'成分计数两次。 -
无关:你有一个错字错误,其中 lambda 的参数拼写错误
sutff。这意味着 lambda 中正确拼写的stuff将使用外部范围内该变量的绑定,这是内部for stuff in mixture循环的最后一次迭代遗留下来的。
标签: python python-3.x list dictionary set