【问题标题】:Change value of tuple based on data in other tuple [duplicate]根据其他元组中的数据更改元组的值[重复]
【发布时间】:2020-12-05 21:03:21
【问题描述】:

我有两个元组

A=[(1,Poland),(2,Canada),(3,Germany)]
B=[(1,16),(2,20),(3,54)]

如何根据元组的第一个值将它们合并在一起以获得类似的东西

C=[(Poland,16),(Canada,20),(Germany,54)]

我找到了This,但这个答案来自 2015 年,也许你知道更好的解决方案。我的数据最多为 10/20 个元组,所以我们不会处理庞大的数据集

【问题讨论】:

  • 元组的对总是按索引匹配,还是可以洗牌? (这意味着例如 B 中的 (1,16) 元组将是第二个而不是第一个)
  • 他们会一直匹配
  • 那么第一个数字有什么意义?
  • C=[(t1[1],t2[1]) for t1, t2 in zip(A,B)]
  • A 中的第一个数字是第二个值的国家/地区的索引,B 中的第一个数字是国家/地区的索引,第二个是来自该国家/地区的订单数量

标签: python python-3.x tuples


【解决方案1】:

如果元组总是像示例中那样排序,这是一个简单的情况,您可以简单地使用zip

C = []
for a,b in zip(A, B):
    C.append(a[1], b[1])

#  or simply C = [(a[1], b[1]) for a,b in zip(A, B)]

如果不能保证顺序(这使得第一个数字实际上是必要的),我会先将一个列表转换为dict,然后简单地匹配一对:

b_dict = dict(B)
C = []
for i, country in A:
    C.append((country, b_dict[i]))

#  or C = [(country, b_dict[i]) for i, country in A]

当然,这可能需要处理一些极端情况,但我会把它留给你。

【讨论】:

    【解决方案2】:

    这对于pandas 来说似乎是个问题。您可以将它们转换为 pandas.Series() 对象或 pandas.DataFrame() 并将元组的第一个数字作为索引。然后只需使用pandas.DataFrame.merge() 按索引合并,您将拥有三列数据框或系列。

    或者它必须是一个嵌套循环:

    C = []
    for i in A:
        for j in B:
            if i[0] == j[0]:
                C.append((i[1], j[1]))
    

    【讨论】:

      【解决方案3】:

      这可能是一个解决方案。

      [(x[1], y[1]) for y in B for x in A if x[0] == y[0]]
      

      【讨论】:

        猜你喜欢
        • 2021-10-25
        • 2021-11-30
        • 2019-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-17
        • 2013-01-10
        • 1970-01-01
        相关资源
        最近更新 更多