Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.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 找出列表中的哪个元素是字典中的键,它是什么';s值_Python_List_Dictionary_Processing Efficiency - Fatal编程技术网

Python 找出列表中的哪个元素是字典中的键,它是什么';s值

Python 找出列表中的哪个元素是字典中的键,它是什么';s值,python,list,dictionary,processing-efficiency,Python,List,Dictionary,Processing Efficiency,我有一本字典: classes_dictionary = {'/m/09x0r': 'Speech', '/m/03qc9zr': 'Screaming'} class_str = list() for k in labels_list: print(k) if k in classes_dictionary: class_str.append(classes_dictionary[k]) 和一份清单: labels_list = ['/m/03k3r', '/m/04rlf

我有一本字典:

classes_dictionary = {'/m/09x0r': 'Speech', '/m/03qc9zr': 'Screaming'}
class_str = list()
for k in labels_list:
  print(k)
  if k in classes_dictionary:
    class_str.append(classes_dictionary[k])
和一份清单:

labels_list = ['/m/03k3r', '/m/04rlf', '/m/07q5rw0', '/m/09x0r', '/m/0jbk']
labels\u list
将始终包含至少一个元素,该元素是
classes\u dictionary
的键。我希望提取计算复杂度最低的类。在本例中,
'/m/09x0r'
将被翻译成
'Speech'
。我的解决方案:

class_str = list()
for k in labels_list:
    print(k)
    if k in self.classes_dictionary:
        class_str.append(self.classes_dictionary[k])
我不介意输出是列表还是任何其他类型。此外,对于问题的一般性,我假设只有一个元素<代码> LabelsSList是一个关键,尽管最好的答案可以同时考虑这两种情况。p>
有没有更有效的方法来实现这一点?我要求在这两个方面,执行效率都是dict上的效率检查键

#YOUR CODE
if k in self.classes_dictionary:
    #do_job

#More efficient
try:
    self.classes_dictionary[k]
    #do_job
except:
    #Key not in dict
    pass

当前,标签列表由一个字符串组成。它似乎应该是一个由5个字符串组成的列表。你不需要自我。在字典前面:

classes_dictionary = {'/m/09x0r': 'Speech', '/m/03qc9zr': 'Screaming'}
class_str = list()
for k in labels_list:
  print(k)
  if k in classes_dictionary:
    class_str.append(classes_dictionary[k])

如果
labels\u list
是一个集合,您可能可以挤出一些性能。使用集合键和字典键的交集:

classes_dictionary = {'/m/09x0r': 'Speech', '/m/03qc9zr': 'Screaming'}
labels_list= set(['/m/03k3r', '/m/04rlf', '/m/07q5rw0', '/m/09x0r', '/m/0jbk'])

[classes_dictionary[k] for k in labels_list & classes_dictionary.keys()]
您可以使用
get()
检查返回值是否不是
None
,而不是查看dict中是否存在键(尽管它是O(1)操作)。如果您知道这只是一个增值
break

class_str = []
for k in labels_list:
    value = classes_dictionary.get(k)
    if value:
        class_str.append(value)
如果您使用的是Python3.8,那么可以使用,它将只计算
classes\u dictionary.get(x)
一次

class_str = [y for x in labels_list if (y := classes_dictionary.get(x)) is not None]

使用列表理解:

class_str = [classes_dictionary[e] for e in set(classes_dictionary).intersection(labels_list)]
>>[classes\u dictionary[k]用于标签中的k\u列表,如果classes\u dictionary中的k]
[“演讲”]
如果只需要一个匹配项,则可以与生成器表达式一起使用,以在找到匹配项后停止搜索:

>>下一步(类别字典[k]表示标签中的k,如果类别字典中的k)
“演讲”

您可以在列表中使用dict键与
标签列表
中的元素的交点:

class_str = [classes_dictionary[e] for e in set(classes_dictionary).intersection(labels_list)]
输出:

['Speech']

测试集成员资格的效率与测试字典成员资格的效率相同,因此,如果在classes\u dictionary中有k,则可以在此处用
替换交集。除非字典中实际存在绝大多数键,否则这不会更有效-请参阅:“只要不满足条件,try/except比显式if快。[…]只有在实际满足条件的情况下,if版本的速度才会明显加快。”根据OP,字典中实际只有一个键,因此在这种情况下,try/except的速度明显较慢。