繁体   English   中英

如何将代码转换为列表推导式

[英]How to convert code to a list comprehension

我正在尝试将下面的代码重写为列表理解,但是该行 - `if groceries[k] == v and k not in most_needed' - 无法按预期工作。 它会生成一个错误消息,指出 most_needed 未被识别,并且当它被声明时,当值相同时,代码会产生重​​复项 - 例如两个意大利面和两个莎莎酱。 输出是一个排序的项目列表,其中的值的键以相反的顺序打印。 有人可以建议如何纠正吗? 谢谢。

groceries = {'apples': 5, 'pasta': 3, 'carrots': 12, 'orange juice': 2, 'bananas': 8,   
            'popcorn': 1, 'salsa': 3, 'cereal': 4, 'coffee': 5, 'granola bars': 15,  
            'onions': 7, 'rice': 1, 'peanut butter': 2, 'spinach': 9}
most_needed = []  

for v in sorted(groceries.values(), reverse=True):
    for k in groceries:
        if groceries[k] == v and k not in most_needed:
            most_needed.append(k)
            break
print(', '.join(most_needed) + '.')

# prints --> granola bars, carrots, spinach, bananas, onions, coffee, apples, cereal, 
  salsa, pasta, peanut butter, orange juice, rice, popcorn 

most_needed = [k for v in sorted(groceries.values(), reverse=True) for k in groceries
               if groceries[k] == v and k not in most_needed] 

我认为你把事情复杂化了

groceries = {'apples': 5, 'pasta': 3, 'carrots': 12, 'orange juice': 2, 'bananas': 8,   
            'popcorn': 1, 'salsa': 3, 'cereal': 4, 'coffee': 5, 'granola bars': 15,  
            'onions': 7, 'rice': 1, 'peanut butter': 2, 'spinach': 9}

most_needed = sorted(groceries.keys(),key=lambda x: groceries[x], reverse=True)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM