如何从两个列表中找到匹配项(来自MySQL和csv)

时间:2017-08-23 21:50:54

标签: python mysql list csv

我正在尝试匹配两个列表中的数据结果。

第一个数据源来自MySQL。

第二个数据源来自csv。

第一个输出(MySQL)或b的代码如下:

conn = MySQLdb.connect("localhost", "username", "pwd", "databasename")
cursor = conn.cursor()
query = "select ID from Table1"
cursor.execute(query)
a = [item[0] for item in cursor.fetchall()]
b = ('[{}]'.format(', '.join(a)))

第二个输出(csv)或c的代码如下:

db = pd.read_csv(File, usercols=['ID'], skiprows=skip)
c = dg['ID'].values.tolist()

第二个数据源是csv文件。 我正在尝试使用底码来获得比赛。

set(b).intersection(c)
set(b) & set(c)

但是,我没有像我预期的那样看到比赛。

例如,第一个List包含如下数据:

[111111, 2222, 3333333, 4444444]

Second List的数据如下:

[8888888, 2222, 6748987, 3688777, 55555]

我期待得到结果:

set([2222])

但我只有

set([])

两个列表中是否存在数据类型(可能导致不匹配)等原因?

1 个答案:

答案 0 :(得分:0)

是的,交叉路口应该有效。我测试了你的代码并得到了:

ls1 = [111111, 2222, 3333333, 4444444]
ls2 = [8888888, 2222, 6748987, 3688777, 55555]

set(ls1).intersection(ls2)

输出:

{2222}

另一种方法是:

ls1 = [111111, 2222, 3333333, 4444444]
ls2 = [8888888, 2222, 6748987, 3688777, 55555]

[x for x in ls1 if x in ls2]

输出:

[2222]