Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用字典键提取列表项?_Python - Fatal编程技术网

Python 如何使用字典键提取列表项?

Python 如何使用字典键提取列表项?,python,Python,我有这样的列表和字典: list_1 = ['if looks kill then i'm murdering] dic_1 = {"kill": -2, "murdering": -3} 我想提取与字典键匹配的列表项,并将其附加到集合中。 我有两个问题: 1.我无法提取与字典中的键匹配的列表项 2.如何将列表项附加到集合中 set_1 = set() for items in list_1: list_1 = items.lower().split() for term in

我有这样的列表和字典:

list_1 = ['if looks kill then i'm murdering]

dic_1 = {"kill": -2, "murdering": -3}
我想提取与字典键匹配的列表项,并将其附加到集合中。 我有两个问题: 1.我无法提取与字典中的键匹配的列表项 2.如何将列表项附加到集合中

set_1 = set()
for items in list_1:
   list_1 = items.lower().split()

   for term in dic_1:

      forth_list = [words for words in list_1 if term != words]
      print forth_list
这会打印出来
查找字典中列表中哪些元素的最有效方法是使用:

dic_1.viewkeys返回的字典视图本质上是一个集合,通过使用&我们获取该集合和列表的交集

|=语法使用in-place或更新集合,以添加在集合右侧找到但尚未在集合中的任何元素

或者,您可以使用。add方法一次只接受一个元素,但是您希望将列表中的所有元素添加到集合中,而不是列表本身

演示:


查找字典中列表中哪些元素的最有效方法是使用:

dic_1.viewkeys返回的字典视图本质上是一个集合,通过使用&我们获取该集合和列表的交集

|=语法使用in-place或更新集合,以添加在集合右侧找到但尚未在集合中的任何元素

或者,您可以使用。add方法一次只接受一个元素,但是您希望将列表中的所有元素添加到集合中,而不是列表本身

演示:


您所描述内容的直接pythonic一行翻译是:

set_1 = set(val for val in list_1.split() if val in dic_1)

它从拆分中获取每个值,检查该值是否是字典中的键,并使用生成器表达式构造这些值的集合。

您所描述的内容的直接Python单行翻译是:

set_1 = set(val for val in list_1.split() if val in dic_1)

它从拆分中获取每个值,检查该值是否是字典中的键,并使用生成器表达式构造这些值的集合。

在循环列表时为什么要修改列表1?list_1=items.lower.split实际上list_1应该是这样的['if looks kill then i'm kirring]。运行算法的结果应该是什么?在循环时为什么要修改list_1?list_1=items.lower.split实际上list_1应该是这样的['if looks kill then i'm kirring]。运行算法的结果应该是什么?这不会更新集合_1集合;它将创建一个新集合。这当然是OP所做的,但我知道多个列表将被添加到一个循环中。@MartijnPieters是的,在这种情况下,没有办法绕过就地更新。从另一方面来说,您的版本在功能上与我的版本相当;我怀疑我的会在速度上胜出,因为列表循环和集合对象的创建完全是用C语言处理的,而不是用生成器表达式。。尽管如此;.update方法和它的._ior__;别名可以采用任何序列,而不仅仅是集合。这也是一个很好的解决方案,但我将使用Martijn Pieters的答案,因为更新集合更容易,这正是我想要的。我对你的答案投了赞成票。这不会更新集合;它将创建一个新集合。这当然是OP所做的,但我知道多个列表将被添加到一个循环中。@MartijnPieters是的,在这种情况下,没有办法绕过就地更新。从另一方面来说,您的版本在功能上与我的版本相当;我怀疑我的会在速度上胜出,因为列表循环和集合对象的创建完全是用C语言处理的,而不是用生成器表达式。。尽管如此;.update方法和它的._ior__;别名可以采用任何序列,而不仅仅是集合。这也是一个很好的解决方案,但我将使用Martijn Pieters的答案,因为更新集合更容易,这正是我想要的。我对你的答案投了赞成票。我从未见过有人使用|=语法。这是一个优雅的解决方案。有没有办法让单词不在dic_1中,也不在单独的集合中?@user690462:使用setlist_1-dic_1获得列表_1中所有元素与dic_1+1中所有元素的差异有趣的解决方案。我从未见过有人使用|=语法。这是一个优雅的解决方案。有没有一种方法可以将不在dic_1中的单词也放在一个单独的集合中?@user690462:使用setlist_1-dic_1来获取列表_1中所有元素与dic_1中所有元素之间的差异
>>> list_1 = "if looks kill then i'm murdering".split()
>>> dic_1 = {"kill": -2, "murdering": -3, "monty": 5}
>>> set_1 = set()
>>> set_1 |= dic_1.viewkeys() & list_1
>>> set_1
set(['murdering', 'kill'])
>>> set_1 |= dic_1.viewkeys() & "monty python's flying circus".split()
>>> set_1
set(['murdering', 'kill', 'monty'])
set_1 = set(val for val in list_1.split() if val in dic_1)