【问题标题】:How to subset an item:value list using another list with just items?如何使用仅包含项目的另一个列表对项目进行子集:值列表?
【发布时间】:2017-10-17 15:47:08
【问题描述】:

我有 2 个列表。一个是单词列表及其频率,另一个是单词列表。

a = [('country',3478), ('island',2900),('river',5)] 
b = ['river','mountain','bank'] 

a 中有数千个条目,但 b 中只有数百个。

如何子集列出 a 以便我返回:

c=[('river',5)]

考虑到条目的数量,For 循环将花费太长时间,我认为列表理解是解决方案,但无法正确解决。

我的主要目标是用我的最终列表创建一个 wordcloud。任何帮助将不胜感激


**编辑是因为我犯了一些评论者指出的错误。我要退货

c=[('river',5)]

而不是

c=['river',5]

正如我最初写的那样。道歉并感谢您指出这一点

【问题讨论】:

  • 你可能想把它作为一个 single 元组返回?
  • 列表推导与 for 循环的速度相同。如果您想要更快的查找,您需要使用 dict 而不是元组列表。

标签: python list list-comprehension word-cloud


【解决方案1】:

你可以试试这个:

a = [('country',3478), ('island',2900),('river',5)] 
b = ['river','mountain','bank'] 
final_data = list([i for i in a if i[0] in b][0])

输出:

['river', 5]

【讨论】:

    【解决方案2】:

    我假设你确实想要:

    c = [('river',5)]  # a list with one tuple
    

    你最好先在b中构造一组值:

    bd = set(b)
    

    那么你可以使用列表推导:

    c = [(x,y) for x,y in a if x in bd]
    

    话虽如此,如果您想查找单词的频率,我建议您不要构建元组列表,而是构建字典。你可以用字典理解做到这一点:

    c = {x: y for x,y in a if x in bd}  # dictionary variant
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      • 1970-01-01
      相关资源
      最近更新 更多