Python 有没有更好的方法来完成这项任务?
我想匹配ID的entities列表中的键,并将键的值附加到entity mapped列表中,然后返回,是否有更好的方法来执行此任务??映射是一个命令。您可以通过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
列表理解来执行此操作
方法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_列表中删除映射不存在的元素,那么什么是最佳方法?