【问题标题】:How to check for presence of the key of a value (as defined in one dict) in another dict, in Python?如何在 Python 中检查另一个字典中是否存在值的键(在一个字典中定义)?
【发布时间】:2015-09-24 11:16:01
【问题描述】:

给定一个映射字典mapping:

{
'John': 'A',
'Mary': 'B',
'Tim' :'C'
}

然后为我提供了一个字典 spend:

{
'John': 23,
'Mary': 1,
}

还有一个字典revenue:

{
'A': 12,
'B': 2,
'C': 23
}

然后:

for k, v in spend.items():
# do stuff

在这个循环中,我想检查revenue 中的条目是否在spend 中没有对应的条目(基于我们的映射)。 Tim 就是一个这样的例子(因为 revenue 中存在“C”,而 spend 中不存在“Tim”)。

再次循环的方法(在此 for 循环内)- 这次是在 revenue.keys() 上并检查密钥是否不在 spend.keys() 中-不幸的是,这不是一个选项,因为这将导致 len(revenue) 的数量重复,每场比赛。

我们如何在没有循环的情况下实现所需的反向检查?

【问题讨论】:

  • 澄清:mapping 字典是静态的。 spend 和 mapping 字典每天都会包含不同的数据。
  • 你必须循环花费吗?如果你可以循环映射,那么它可以在一行中完成:[k for k,v in mapping.items() if not spend.get(k) and income.get(v)]

标签: python python-2.7 dictionary set key


【解决方案1】:

如果您反转 mapping 字典中的键和值,然后遍历收入字典,您可以轻松地做到这一点。您不需要永久反转它,只需在循环之前将其反转并存储在新字典中即可。

例子-

reversedmapping = {v:k for k,v in mapping.items()}
for k,v in revenue.items():
    if (k not in reversedmapping) or (reversedmapping[k] not in spend):
        print(k)

【讨论】:

  • 干得好,阿南德。它运行良好,但现在我必须测试 两个 条件是否为真,并且我遇到了问题。有什么想法吗? stackoverflow.com/questions/31331029/…
  • 那么,当收入字典中的key 未作为mapping 中的值时,您是否不想打印k?
猜你喜欢
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多