比较Python中两个dict的值

2024-05-13 01:02:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两本字典:

budgets = {'Engineering': 4500.0,
 'Marketing': 5000.0,
 'Operations': 3000.0,
 'Sales': 2000.0}

spending = {'Engineering': 5020.0,
 'Marketing': 1550.0,
 'Operations': 3670.0,
 'Sales': 3320.0}

我试着遍历它们,找出spending中的值大于budgets中的值。我现在写了:

^{2}$

但是,当我运行这个程序时,它们都打印Over Budget,显然不是这样。有人能解释一下我处理这个问题的错误吗?在

谢谢:)


Tags: 程序字典错误marketingoveroperationsbudgetsales
3条回答

@aryamcarthy有一个很好的答案,但为了Python的缘故,我将发布另一种方法,您可以只使用一行:

{(sk, 'Over Budget') if sv > budgets[sk] 
       else (sk, 'Under Budget') for sk, sv in spending.items()}

此方法返回以下结果,这不一定是最漂亮的显示信息的方式,但从这里使用print获得漂亮的输出并不遥远:

^{pr2}$

请注意,如果spending中的任何键都不属于budgets,这将引发KeyError。在

使用dict.items()如何:

budgets = {'Engineering': 4500.0,
 'Marketing': 5000.0,
 'Operations': 3000.0,
 'Sales': 2000.0}

spending = {'Engineering': 5020.0,
 'Marketing': 1550.0,
 'Operations': 3670.0,
 'Sales': 3320.0}

for category, spent in spending.items():
    print(category)
    if spent > budgets[category]:
        print('Over Budget')
    else:
        print('Under Budget')

value in spending.values() > budgets.values()实际计算布尔查询value in spending.values()(成员资格检查),然后将结果与budget.values():来自budget的值进行比较。在Python中,任何东西都可以比较,所以您可以将布尔值与列表进行比较——每次都是相同的,在您的例子中,它的计算结果是True。你想要的更像这样:

for key in spending:
    if spending[key] > budgets[key]:
        print('Over Budget')
    else:
        print('Under Budget')

编辑:这只适用于python2。在python3中,您得到TypeError: unorderable types,这可以保证您不会犯这样的错误。在

相关问题 更多 >