Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.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_Python 3.x_Dictionary - Fatal编程技术网

Python 有没有更好的方法来完成这项任务?

Python 有没有更好的方法来完成这项任务?,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我想匹配ID的entities列表中的键,并将键的值附加到entity mapped列表中,然后返回,是否有更好的方法来执行此任务??映射是一个命令。您可以通过列表理解来执行此操作 方法1 def entity_mappings(mapping, entities_list): entity_mapped = [] for (key, value) in mapping.items(): for i in entities_list: if i

我想匹配ID的entities列表中的键,并将键的值附加到entity mapped列表中,然后返回,是否有更好的方法来执行此任务??映射是一个命令。

您可以通过
列表理解来执行此操作

方法1

def entity_mappings(mapping, entities_list):
    entity_mapped = []
    for (key, value) in mapping.items():
       for i in entities_list:
           if i == key:
                entity_mapped.append(value)
    return entity_mapped
您可以在
实体\u列表中搜索,而不是迭代和匹配

复杂性:
O(纳米)

方法2

你也可以像这样查字典

entity_mapped = [value for (key, value) in mapping.items() if key in entities_list]
复杂性:
O(n)

演示

entity_mapped = [mapping.get(i) for i in entities_list if i in mapping]

您可以通过
列表理解
执行此操作

方法1

def entity_mappings(mapping, entities_list):
    entity_mapped = []
    for (key, value) in mapping.items():
       for i in entities_list:
           if i == key:
                entity_mapped.append(value)
    return entity_mapped
您可以在
实体\u列表中搜索,而不是迭代和匹配

复杂性:
O(纳米)

方法2

你也可以像这样查字典

entity_mapped = [value for (key, value) in mapping.items() if key in entities_list]
复杂性:
O(n)

演示

entity_mapped = [mapping.get(i) for i in entities_list if i in mapping]
其他解决办法是:

In [16]: mapping = {2:5,6:8,9:87}

In [17]: entities_list = [2,6]

In [18]: print [value for (key, value) in mapping.items() if key in entities_list]
[5, 8]

In [19]: print [mapping.get(i) for i in entities_list if i in mapping]
[5, 8]
由于dict键是唯一的列表,例如:

[mapping[k] for k in set(entities_list) & set(mapping.keys())]
结果是:

mapping = {'v':22, 'b': 0, 'd': 44}
entities_list = ['v', 'w', 'd']
其他解决办法是:

In [16]: mapping = {2:5,6:8,9:87}

In [17]: entities_list = [2,6]

In [18]: print [value for (key, value) in mapping.items() if key in entities_list]
[5, 8]

In [19]: print [mapping.get(i) for i in entities_list if i in mapping]
[5, 8]
由于dict键是唯一的列表,例如:

[mapping[k] for k in set(entities_list) & set(mapping.keys())]
结果是:

mapping = {'v':22, 'b': 0, 'd': 44}
entities_list = ['v', 'w', 'd']

我建议您使用,它可以返回一个迭代器,将函数应用于列表的每个元素。出于您的目的,函数是
mapping.get
,列表是
entities\u list
。如果实体不是
mapping
字典的键,它将在输出列表中插入
None
,如下所示:

print([mapping[k] for k in set(entities_list) & set(mapping.keys())])
# [22, 44]
与发电机相同的理解给出了以下内容:

def entity_mappings(mapping, entities_list):
    return map(mapping.get, entities_list)

mapping = {2:5, 6:8, 9:87}
entities_list = [2, 6, 5]   # Note that 5 is not a key of mapping

print(list(entity_mappings(mapping, entities_list)))  # [5, 8, None]

使用诸如map或generator对象之类的迭代器可以节省内存,因为如果不需要,它不会计算所有值并将其存储在内存中。相反,它一次只能产生一个项目。当然,方法总是取决于你需要做什么,所以你可能也更喜欢直接使用列表,这没问题

我建议您使用,它可以返回一个迭代器,将函数应用于列表的每个元素。出于您的目的,函数是
mapping.get
,列表是
entities\u list
。如果实体不是
mapping
字典的键,它将在输出列表中插入
None
,如下所示:

print([mapping[k] for k in set(entities_list) & set(mapping.keys())])
# [22, 44]
与发电机相同的理解给出了以下内容:

def entity_mappings(mapping, entities_list):
    return map(mapping.get, entities_list)

mapping = {2:5, 6:8, 9:87}
entities_list = [2, 6, 5]   # Note that 5 is not a key of mapping

print(list(entity_mappings(mapping, entities_list)))  # [5, 8, None]


使用诸如map或generator对象之类的迭代器可以节省内存,因为如果不需要,它不会计算所有值并将其存储在内存中。相反,它一次只能产生一个项目。当然,方法总是取决于你需要做什么,所以你可能也更喜欢直接使用列表,这没问题

类似于:
entity\u mapped=[i在实体中的映射[i]如果i在映射中,则为i在映射列表中]
?这会产生预期的输出吗?或者
[为k-in-set(entities_-list)和set(mapping.keys())映射[k]
最好也提供一些示例输入和输出。更容易帮助。映射= {2,5,6:8,9:8}实体列表= [2,6]实体映射= [5,8] @ ClebIf。你正在尝试添加你的项目的顺序,考虑使用OrrordEdEd(),那么你根本不需要任何映射匹配。如果需要筛选,则将保留添加项的顺序,并且列表不必按任何特定顺序。例如:
entity\u mapped=[mapping[i]for i in entities\u list if i in mapping]
?这会产生预期的输出吗?或者
[为k-in-set(entities_-list)和set(mapping.keys())映射[k]
最好也提供一些示例输入和输出。更容易帮助。映射= {2,5,6:8,9:8}实体列表= [2,6]实体映射= [5,8] @ ClebIf。你正在尝试添加你的项目的顺序,考虑使用OrrordEdEd(),那么你根本不需要任何映射匹配。如果您想要过滤,则会保留添加项目的顺序,并且列表不必按任何特定顺序。您应该添加第二个版本为O(n),而第一个版本为O(nm)。您应该添加第二个版本为O(n),而第一个版本为O(nm)。这是否保持了列表显示的顺序?我认为这是练习的主要目标。@Dalen you right这不是“保持秩序”,但你在OP问题中找到它的地方?当然没有,但是当你尝试这样的事情时,你通常是想这样做的,因为过滤可以通过任何简单的方法实现。不过,我会给你+1来考虑集合。@Dalen谢谢你。我认为顺序是不正确的,因为方法
.items()
没有顺序。是的,非常正确,所以你可能是对的。但代码只是唤醒了这种联系。不过我可能错了。然而,当我看到布景时,我首先想到的是布景。然后是map(),然后是list/generator comprehension。这是否保持了列表显示的顺序?我认为这是练习的主要目标。@Dalen you right这不是“保持秩序”,但你在OP问题中找到它的地方?当然没有,但是当你尝试这样的事情时,你通常是想这样做的,因为过滤可以通过任何简单的方法实现。不过,我会给你+1来考虑集合。@Dalen谢谢你。我认为顺序是不正确的,因为方法
.items()
没有顺序。是的,非常正确,所以你可能是对的。但代码只是唤醒了这种联系。不过我可能错了。然而,当我看到布景时,我首先想到的是布景。然后是map(),然后是list/generator。如果我想从entities_列表中删除映射不存在的元素,那么什么是最佳方法?如果我想从entities_列表中删除映射不存在的元素,那么什么是最佳方法?