【问题标题】:Python retrieve values in list from set of tuplesPython从一组元组中检索列表中的值
【发布时间】:2021-05-28 12:29:30
【问题描述】:

假设我在这里有一个名为 T 的有序列表

T = ['foo', 'bar', 'cad']

然后我有一个包含元组的集合 M。

M = { 
        ('jack', 'bar'), 
        ('bob', 'foo'), 
        ('let', 'cad') 
    }

对于 T 中的每一项,我都想在 M 中找到对应的元组对。 所以我的输出看起来像下面的列表

O = [ 'bob', 'jack', 'let' ]

我尝试了这个集合推导,但这当然只是迭代了按 M 顺序定义的元素,我需要按 T 顺序定义它。

answer = [ a for (a,b) in R if b in T ]

作为后续问题,假设我的 M 看起来像:

M = { 
        ('bar', 'jack'), 
        ('foo', 'bob'), 
        ('cad', 'let') 
    }

这会让这个问题更容易解决吗?

不使用字典可以解决这个问题吗?纯粹是列表、集合和元组?

【问题讨论】:

  • 您的预期输出是不可能的,因为您希望一个集合按特定顺序排列,但集合是无序的。
  • 如果你需要一些订单,建立一个列表而不是一个集合
  • 对不起,我的错字我希望我的预期答案是一个列表。
  • @DanielJ 如果这里的答案解决了您的问题,请接受它

标签: python


【解决方案1】:
T = ['foo', 'bar', 'cad']

M = { 
        ('jack', 'bar'), 
        ('bob', 'foo'), 
        ('let', 'cad') 
    }

d = {k:v for (v,k) in M}

answer = [d[elt] for elt in T]

print(answer)
# ['bob', 'jack', 'let']

【讨论】:

    【解决方案2】:
    T = ['foo', 'bar', 'cad']
    M = { 
            ('jack', 'bar'), 
            ('bob', 'foo'), 
            ('let', 'cad') 
        }
    
    # Solution 1 - Order is different everytime
    a = [x for (x, y) in M if y in T]
    print(a)
    
    # Solution 2 - Give you answer in same order always
    MT = {y:x for (x, y) in M}
    a = [MT[i] for i in T]
    print(a)
    

    你可以试试这个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 2020-01-09
      • 2017-10-09
      • 2022-12-13
      相关资源
      最近更新 更多