【问题标题】:Check if any of the list of keys are present in a dictionary [duplicate]检查字典中是否存在任何键列表[重复]
【发布时间】:2017-11-23 02:50:52
【问题描述】:

我有一个固定的字符串列表。我需要检查这些字符串中的任何一个是否是字典中的键(只需要 True 或 False)。我可以去

如果 dict 中的 'asdf' 或 dict 中的 'qwer' 或 dict 中的 'zxcv' ...: ...做重要的秘密事情...

但它似乎不是最理想的。有没有更惯用的方式来做到这一点?

【问题讨论】:

  • 阅读文档any ..
  • 你到底在做什么?
  • 检查 POST 请求输入
  • 看起来人们对这个问题投了反对票,所以我要删除它。
  • 不要删除它。最近,人们很快就对那些不值得一票的问题投了反对票。不知道为什么。它会及时上升。

标签: python


【解决方案1】:

您可以使用any 并遍历您要检查的每个键

if any(key in dict for key in ['asdf', 'qwer', 'zxcf']):
    # contains at least one of them

这将短路并在找到第一个匹配项时返回True,如果没有找到则返回False

【讨论】:

  • 啊!正是我想要的。
  • 如何在if语句中获取key??
【解决方案2】:

你也可以使用&:

keys =  ['asdf', 'qwer', 'zxcf']
if d.keys() & keys:
    print(d)

python2 需要 d.viewkeys()

或者,将键设置为 set 并查看集合是否不相交,这将是最快的方法:

keys =  {'asdf', 'qwer', 'zxcf'}

if not keys.isdisjoint(d):
    print(d)

【讨论】:

  • 我在运行你的第一个 sn-p 时遇到 TypeError 异常。我应该在那里改变一些东西吗?
  • @Spiderman,您使用的是 python 2 还是 3?如果使用 python2,您将收到带有 if d.keys() & keys 的 TypeError,因为您需要调用 viewkeys
  • 是的,我正在使用 2.7 :) 感谢您的回复。
【解决方案3】:

您可以尝试在 python 中使用列表推导:

if any([True for entry in your_list if entry in dict]):
    --dostuff--

编辑:CoryKramer 建议删除“[]”以使其成为生成器,而不是在检查任何元素是否为“真”之前评估整个列表:

if any(True for entry in your_list if entry in dict):
    --dostuff--

【讨论】:

  • 哦,不错的补充。谢谢科里克莱默!
猜你喜欢
  • 2012-06-15
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
相关资源
最近更新 更多