【问题标题】:How can I implement a function that can do the comparison for dictionaries?如何实现可以对字典进行比较的功能?
【发布时间】:2019-07-13 06:50:22
【问题描述】:

我遇到了一个非常简单的问题。我需要在 Python 3 中实现一个检查和一个减号函数,它可以先进行检查,然后对字典进行减法。 例如:

d1 = {'a': 10, 'b': 9, 'c': 8, 'd': 7}
d2 = {'a': 1, 'b': 2, 'c': 3, 'e': 2} 
result = check(d1, d2)

检查函数比较两个字典,如果第一个参数大于第二个参数,则返回True,如果第二个字典更大,则返回False

在这个例子中,结果应该返回False,因为d2"e:2",但d1 没有。

简而言之,我想实现一个检查函数,仅当d2d1 的子集时才返回True,这意味着d1 包括d2 的所有键,并且对于每个键的值,@ 987654332@也大于d2

检查功能应该能够检查d1是否包含d2的所有键,并且d1的值大于d2(我不希望任何负值出现在新的减法后的字典(d3)。)

我相信有一种非常简单的方法可以在 Python 3 中实现这个功能。

【问题讨论】:

  • 字典中的键是否始终保持不变?好像只有 a-z 键??
  • 不,我只是在示例中使用字母作为键。 :)
  • @Miss.Q 如果下面的回答帮助你解决了你的问题,你应该接受它。

标签: python python-3.x list dictionary subset


【解决方案1】:

Python 字典有一个keys() 方法,可让您访问字典中的键。从keys() 返回的对象的优点之一是它的行为类似于set,因此您可以轻松测试一个是否是另一个的超集/子集:

d1 = {'a': 10, 'b': 9, 'c': 8, 'd': 7}
d2 = {'a': 1, 'b': 2, 'c': 3, 'e': 2} 

d1.keys() >= d2.keys()
# false

您可以使用all() 来确定列表中的每个值是否为真,因此一旦您知道 d1 是 d2 的超集,您可以查看:

all(d1[k] >= d2[k] for k in d2) 

是真的。

您可以将它们组合起来:

 d1.keys() >= d2.keys() and all(d1[k] >= d2[k] for k in d2)

但是顺序很重要——您需要首先检查d1 是否具有d2 中的所有键,否则all() 中的表达式将在您尝试查找不存在的键时抛出异常。如果第一部分为假而不检查第二部分,则上述内容将返回 false,因此您可以通过此顺序避免该错误。

【讨论】:

  • 谢谢!我现在就去试试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多