【问题标题】:Looking for a way to use merge join on two sorted lists寻找一种在两个排序列表上使用合并连接的方法
【发布时间】:2022-07-08 01:12:00
【问题描述】:

考虑以下两个列表

list_1 = [(288645, [300]),
          (249594, [300, 305]),
          (288647, [300, 310]),
          (249587, [300])]

list_ 2 = [(290, [786020, 601157, 827251]),
          (300, [814888, 829081, 365044]),
          (305, [781169, 826323]),
          (310, [819361, 639450])]

需要注意的一些重要事项:

list_1list_1[1] 排序:

list_1 = sorted(list_1_dict.items(), key=lambda item: item[1])

list_2list_2[0]中排序

list_1 = sorted(list_2_dict.items(), key=lambda item: item[0])

对于这两个列表,这里是 list_dict 的示例

list_dict = {288645: [300], 249594: [305, 300], 385623: [30563]}

此外,对于两个列表,list[0] 始终是单个元素

我想创建一个连接,其中list_1[1] 中的元素与list_2[0] 中的元素匹配。在我们的例子中,临时结果是这样的:

list_3 = [(288645, [814888, 829081, 365044]),
          (249594, [814888, 829081, 365044]),
          (288647, [814888, 829081, 365044]),
          (249587, [814888, 829081, 365044])]

我遇到的一些问题是任一列表中的两个元素都可以多次到达。所以使用流行的排序合并连接(因为列表已经排序)是行不通的。检查一个元素是否大于另一个元素会忽略我的想法。 我正在考虑完全改变结构,因为这可能会让人头疼。有什么想法或建议吗?

【问题讨论】:

  • 您的代码引用了一个未定义的list_1_dict。请添加。

标签: python merge


【解决方案1】:

根据您的输出,这是我的解决方案:

list_3 = []
for d1key, d2keys in list_1:
    d2values = list_2_dict.get(d2keys[0], None)
    if d2values:
        list_3.append((d1key, d2values))
list_3

注意事项

  • 您无需将list_2_dict 转换为list_2
  • d2values 是你想要的,如果来自 list_1 的密钥存在于 list_2_dict

【讨论】:

  • 泰!因为它应该模仿排序合并连接,所以排序会很棒!
猜你喜欢
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 2016-03-30
  • 2015-05-12
  • 1970-01-01
相关资源
最近更新 更多