Python 在列表中查找数据并在另一个列表中使用

Python 在列表中查找数据并在另一个列表中使用,python,list,dictionary,find,compare,Python,List,Dictionary,Find,Compare,有没有一种类似于蟒蛇的方法可以轻松快速地使用列表。我找到了一些使用dict的解决方案,但对于大数据来说可能会比较慢。简单地说,在B中找到对应于A的每个条目的值 例如: A = [a,a,b,c,c,c,d,e,e,f,g,g,g,...] B = [a,1 b,2 c,3 d,2 e,1 f,2 g,5 ...] 预期结果C(A的长度) 您可以使用replace() 或者你可以试试 A = ['a','a','b','c'

有没有一种类似于蟒蛇的方法可以轻松快速地使用列表。我找到了一些使用dict的解决方案,但对于大数据来说可能会比较慢。简单地说,在B中找到对应于A的每个条目的值

例如:

A = [a,a,b,c,c,c,d,e,e,f,g,g,g,...]
B = [a,1
     b,2
     c,3
     d,2
     e,1
     f,2
     g,5
     ...]
预期结果C(A的长度)

您可以使用replace()

或者你可以试试

A =  ['a','a','b','c','c','c','d','e','e','f','g','g','g']

B = {'a': 1, 'b': 2, 'c':3, 'd': 2, 'e': 1, 'f':2, 'g': 5}

C = [B[x] if x in B else x for x in A]

出去

您可以使用replace()

或者你可以试试

A =  ['a','a','b','c','c','c','d','e','e','f','g','g','g']

B = {'a': 1, 'b': 2, 'c':3, 'd': 2, 'e': 1, 'f':2, 'g': 5}

C = [B[x] if x in B else x for x in A]

出去


这里有一个完整的
map
答案,尽管Ama的列表理解示例是等效的

A=['A','A','b','c','c','d','e','e','e','f','g','g','g']
B={'a':1,'B':2,'c':3,'d':2,'e':1,'f':2,'g':5}
C=列表(映射(λx:B[x],A))
印刷品(C)
[1, 1, 2, 3, 3, 3, 2, 1, 1, 2, 5, 5, 5]

如果您的数据非常庞大,您可能需要更复杂的结构,可能还需要流式处理来实现这一点。然而,在绝大多数情况下,你不需要这个。

这里有一个完整的
映射
答案,尽管Ama的列表理解示例是等效的

A=['A','A','b','c','c','d','e','e','e','f','g','g','g']
B={'a':1,'B':2,'c':3,'d':2,'e':1,'f':2,'g':5}
C=列表(映射(λx:B[x],A))
印刷品(C)
[1, 1, 2, 3, 3, 3, 2, 1, 1, 2, 5, 5, 5]

如果您的数据非常庞大,您可能需要更复杂的结构,可能还需要流式处理来实现这一点。但是,在绝大多数情况下,您不需要这样做。

dict是实现这一点的最佳方式,因为它们的查找性能要好得多。我们谈论的数据有多大?可能会有一些解决方案,比如对数据进行分区和分层查找。。。但是,只有当最初的解决方案被证明是缓慢的,我才会达到这个目标。是的,我同意。实际上,a是用dic做的,但a不知道为什么我觉得用列表可以更快。我将把它与Ama建议的优秀解决方案进行比较。DICT是实现这一点的最有效的方法,因为它们的查找性能要好得多。我们谈论的数据有多大?可能会有一些解决方案,比如对数据进行分区和分层查找。。。但是,只有当最初的解决方案被证明是缓慢的,我才会达到这个目标。是的,我同意。实际上,a是用dic做的,但a不知道为什么我觉得用列表可以更快。我将把它与Ama建议的伟大解决方案进行比较。这本质上是一个dict查找,不是吗?不过,这是一个很好的解决方案!我会本能地使用映射或列表理解来查找dict B中的值。@RecencyEffect我尝试了这个
列表(map(lambda x:B.get(x),a))
,但它显示了一个错误TypeError:“dict”对象不可调用。我编辑了我的答案,如果你能提供你的答案,我们都可以学习,这将是非常有用的。谢谢。奇怪,它在这里工作。我将发布一个答案。您确定收到错误时没有执行
B(x)
吗是的,它可以工作。我不知道为什么我早些时候会出错。我会投票支持你的答案。谢谢你,谢谢你,阿玛,你是最棒的。我要把这个方法和dic做个比较。这基本上是一个dict查找,不是吗?不过,这是一个很好的解决方案!我会本能地使用映射或列表理解来查找dict B中的值。@RecencyEffect我尝试了这个
列表(map(lambda x:B.get(x),a))
,但它显示了一个错误TypeError:“dict”对象不可调用。我编辑了我的答案,如果你能提供你的答案,我们都可以学习,这将是非常有用的。谢谢。奇怪,它在这里工作。我将发布一个答案。您确定收到错误时没有执行
B(x)
吗是的,它可以工作。我不知道为什么我早些时候会出错。我会投票支持你的答案。谢谢你,谢谢你,阿玛,你是最棒的。我要把这个方法和dic做个比较。
A =  ['a','a','b','c','c','c','d','e','e','f','g','g','g']

B = {'a': 1, 'b': 2, 'c':3, 'd': 2, 'e': 1, 'f':2, 'g': 5}

C = [B[x] if x in B else x for x in A]

[1, 1, 2, 3, 3, 3, 2, 1, 1, 2, 5, 5, 5]