Python“;加入;功能类似于unix“;加入;

Python“;加入;功能类似于unix“;加入;,python,join,Python,Join,我很好奇是否有像unix版本那样的内置python连接函数(请参阅)。我知道该功能是通过内置sqlite3模块实现的,可能还包括一些其他模块,如pytables 如果这是一个基本问题,那么很抱歉,但是我发现搜索“python连接”和相关查询会受到标准python连接函数的严重污染。而且,如果没有这样的功能,我也不希望这么容易找到这些信息 您可以使用字典轻松模拟连接: d1 = {"a": 1, "b": 2} d2 = {"b": 3, "c": 4} print dict((key, (d1[

我很好奇是否有像unix版本那样的内置python连接函数(请参阅)。我知道该功能是通过内置sqlite3模块实现的,可能还包括一些其他模块,如pytables


如果这是一个基本问题,那么很抱歉,但是我发现搜索“python连接”和相关查询会受到标准python连接函数的严重污染。而且,如果没有这样的功能,我也不希望这么容易找到这些信息

您可以使用字典轻松模拟连接:

d1 = {"a": 1, "b": 2}
d2 = {"b": 3, "c": 4}
print dict((key, (d1[key], d2[key])) for key in d1 if key in d2)
{'b': (2, 3)}
或者,Python 3.x中的最后一行:

print {key: (d1[key], d2[key]) for key in d1.keys() & d2.keys()}
{'b': (2, 3)}
(2.x行在Python3.x中也可以使用,但是如果
&
中只有一小部分的
d1
的键位于交叉点,那么使用
&
来获取字典键的交叉点可能会加快速度。)

我不知道有哪种内置函数可以在单个函数调用中执行此操作。

没有


如果您在Unix上运行Python,则可以使用
子流程
模块在外部运行该命令。

这是一个Python版本的join函数,它不会处理所有潜在的错误情况。但它展示了基本思想

# usage join(open('f1.txt'), open('f2.txt'))

def join(fd_a, fd_b) :
    result = []
    la = fd_a.readline()
    lb = fd_b.readline()
    while la and lb :
        start_a, rest_a = la.split(' ', 1)
        start_b, rest_b = lb.split(' ', 1)
        if cmp(start_a, start_b) == 0 :
            result.append([start_a, [rest_a, rest_b]])
            la = fd_a.readline()
            lb = fd_b.readline()
        elif cmp(start_a, start_b) < 0 :
            la = fd_a.readline()
        else :
            lb = fd_b.readline()
    return result
用法连接(open('f1.txt')、open('f2.txt')) def连接(fd_a、fd_b): 结果=[] la=fd_a.readline() lb=fd_b.readline() 而la和lb: 开始a,休息a=la.分割('',1) 开始时,剩余时=磅分割(“”,1) 如果cmp(启动a,启动b)==0: result.append([start\u a、[rest\u a、rest\u b]])) la=fd_a.readline() lb=fd_b.readline() elif cmp(启动a、启动b)<0: la=fd_a.readline() 其他: lb=fd_b.readline() 返回结果
+1,因为它看起来像是unix
join
的一个很好的模拟,包括文本文件中字段的隐式定义。