【问题标题】:Getting keys and values of dictionary if key in list如果键在列表中,则获取字典的键和值
【发布时间】:2022-07-12 00:33:34
【问题描述】:

所以我有一个字典名称“ngrams_count”。我想在这个字典中找到名为“words_to_find”的列表中的所有键。我还想返回与这些键关联的值。

到目前为止,这就是我正在使用的东西

ideasrep = [key for key in words_to_find if key in ngrams_count]

只返回在单词列表中找到的键。

我还在寻找一种方法来仅返回值大于 1 的键/值对。我尝试过类似的技术:

[(key,values) for key, values in ngrams_count.items() if values > 1]

但是,这似乎只有在我留在字典中并且我的想法已经用完时才有效......

【问题讨论】:

  • ideasrep = [key for key in words_to_find if key in ngrams_count.get(key, 0) > 1]?还是ideasrep = [(key, ngrams_count[key]) for key in words_to_find if key in ngrams_count.get(key, 0) > 1]?有点不清楚您是否有两个单独的问题,或者试图以某种方式将两件事合并为一个。您需要详细说明一下,最好是尽可能多地以minimal reproducible example 的形式提供(两个集合的示例输入值、所需的输出等)。

标签: python list dictionary


【解决方案1】:

您的第一个版本几乎是正确的,您只需在结果中添加ngrams_count[key]

ideasrep = [(key, ngrams_count[key]) for key in words_to_find if key in ngrams_count]

或者您可以使用第二个版本,但更改条件以检查密钥是否在words_to_find中。

[(key,values) for key, values in ngrams_count.items() if key in words_to_find]

如果words_to_find 很大,则应将其转换为set,以使第二个版本更高效。

【讨论】:

  • 注意:set 转换应该在外部 listcomp;在其中(以自然方式编写的任何代码)你最终会一遍又一遍地重建set,并失去set的任何好处。
猜你喜欢
  • 2017-02-28
  • 1970-01-01
  • 2018-03-08
  • 2013-08-29
  • 2023-01-18
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
相关资源
最近更新 更多