【问题标题】:Matching values from two dictionaries or lists匹配来自两个字典或列表的值
【发布时间】:2020-10-21 03:44:13
【问题描述】:

我有两个单独的 CSV 文件:

一个包含公司名称和该公司的 URL,另一个包含公司 URL 以及该 URL 中该公司的电话号码。

csv_1 示例:

Company Name, Company_URL
comp_1 , comp_1_url
comp_2, comp_2_url
comp_3, comp_3_url

csv_2 示例:

Company URL, Company_Num
comp_1_url, comp_1_phone num 1
comp_1_url, comp_1_phone num 2
comp_2_url, comp_2_phone num 1
comp_3_url, comp_3_phone num 1

我想将 csv_1 中的公司名称与 csv_2 的结果相关联。

预期输出:

Company Name, Company URL, Company_Num
comp_1, comp_1_url, comp_1_phone num 1
comp_1, comp_1_url, comp_1_phone num 2
comp_2, comp_2_url, comp_2_phone num 1
comp_3, comp_3_url, comp_3_phone num 1

我尝试将 CSV_1 转换为字典,然后将字典中的值 (Company_URL) 与 CSV_2 中的 url (Company_2 URL) 进行匹配,但需要了解如何获取电话号码:

dictionary = {}
def dictionary_test():
    for key in companies:
        for value in companies_url_list:
            dictionary[key] = value
            # companies_url_list.remove(value)
            break

dictionary_test()

dictionary output:
{'comp_1':comp_1_url,'comp_2':comp_2_url,'comp_3':comp_3_url}

matches = [k for k, v in dictionary.items() if v in urls]
print(len(phone_numbers))
print(len(matches))

如果 CSV_1 中的 Company_url 与 CSV_2 中的 URL 匹配,我需要一种方法来附加公司名称列表。最好的方法是什么?

编辑:

test_dict = {} #company_url from CSV_1 as key and comp_name as value
for key in comp_url:
    for value in comp_name:
        test_dict[key] = value
        break

来自 CSV_2 的列表:

bbb_url = company_url_and_phone['URL Searched'].to_list()
bbb_phone = company_url_and_phone['Phone Numbers'].to_list()

【问题讨论】:

  • 将它们加载到 pandas 数据帧中并加入数据帧。
  • 它们的长度不同。每个公司 URL 可能会返回多个电话号码结果,并且 URL 与电话号码一起附加到列表中。
  • 加入并不要求它们具有相同的长度。
  • 它将在结果中为所有匹配的 URL 创建多行。
  • 您能在下面提供一个简短的示例答案吗?

标签: python dictionary list-comprehension


【解决方案1】:

csv_1 的字典应该使用 URL 作为键。那么你就不需要循环了。您可以使用来自csv_2 的 URL 简单地查找公司名称。

import csv

company_dict = {}
with open("csv_1.csv") as f:
    dr = csv.DictReader(f)
    for row in dr:
        company_dict[row['Company_URL'].strip()] = row['Company Name'].strip()

print("Company Name, Company URL, Company_Num")
with open("csv_2.csv") as f:
    dr = csv.DictReader(f)
    for row in dr:
        print(f"{company_dict[row['Company URL'].strip()]}, {row['Company URL'].strip()}, {row['Company_Num']}")

【讨论】:

  • 我没有关注,我将编辑我的帖子以提供更多信息。我试过你的代码,但没有用。
  • 我打错了,dictReader 应该是DictReader
  • 我在我的测试中去掉了 CSV 文件中的字段之间的空格,它起作用了。
  • 我是通过合并 pandas 得到的。感谢您的帮助
猜你喜欢
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 2020-04-28
相关资源
最近更新 更多