【问题标题】:How to find match from two Lists (from MySQL and csv)如何从两个列表中查找匹配项(来自 MySQL 和 csv)
【发布时间】:2018-02-01 15:22:11
【问题描述】:

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

第一个数据源来自 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]

第二个列表的数据如下:

[8888888, 2222, 6748987, 3688777, 55555]

我希望得到以下结果:

set([2222])

但我只得到了

set([])

是否有任何原因,例如来自两个列表的数据类型(可能导致不匹配)?

【问题讨论】:

  • 运行你的代码给了我预期的结果。
  • >>> x = [111111, 2222, 3333333, 4444444] >>> y = [8888888, 2222, 6748987, 3688777, 55555] >>> set(x) & set(y) {2222} 适合我。
  • 有什么原因它不能从我这里开始?会不会是因为 Lists 中的 Varchar (MySql) vs. Number (csv) 数据类型?
  • 顺便说一句,你在这里做什么疯狂的事情:b = ('[{}]'.format(', '.join(a)))?然后你不应该比较 a 和 c 而不是 b 和 c 吗?
  • 那部分只是删除a周围的单引号。 MySql 的原始输出在 (Varchar) 周围都有单引号。所以,我又做了一个过程来删除 a,它是 b。

标签: python mysql list csv


【解决方案1】:

是的,交叉点应该可以。我测试了你的代码并得到:

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]

【讨论】:

    猜你喜欢
    • 2012-07-21
    • 2017-07-25
    • 2013-08-12
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多