从 CSV 文件中选择清单列表中不存在的值

Selecting values from CSV file which are not already in an inventory list

我在列表中列出了 phone 个扩展名。我还有 phone 在 csv 文件中分配给用户的扩展名。

我希望将分配的编号(字典)与清单(列表)中的编号进行比较。我想打印出所有尚未从库存列表中分配的号码。

这是我一直在使用的流程,首先我将 CSV 读入字典。接下来,我遍历 phone 字段并将其推送到一个开放列表,我在其中删除了 运行 比较之前的重复项。

但是我的程序没有提供我正在寻找的输出。

这是 CSV 文件:

Directory_Num01,13037,Office,Luis
Directory_Num02,13036,AP,Jess
Directory_Num03,13040,Loading Dock,Loading Dock
Directory_Num04,13036,Lobby,Guest
Directory_Num05,13099,Office,Office
Directory_Num06,13037,Office,Office
Directory_Num07,13036,Lobby,Beth

代码如下:

import csv

inventory_numbers = ['13037', '13036', '13085', '13079', '13040', '13099', '13055']

with open(r'\file.csv', newline='') as f:
    empty_dict = {}
    empty_list = []
    without_duplicates = []
    index = 0

    reader = csv.reader(f)
    for row in reader:
        empty_dict[row[0]] = {'phone_number':row[1], 'location':row[2], 'description':row[3]}

    for catalog, directoy_info in empty_dict.items():
        tele = f"{directoy_info['phone_number']}"
        empty_list = tele

    for element in empty_list:
        if element not in without_duplicates:
            without_duplicates.append(element)
    print(without_duplicates)

我建议使用 set 数据类型的更简单方法。

inventory_numbers = ['13037', '13036', '13085', '13079', '13040', '13099', '13055']
assigned_numbers = []

with open(r'file.csv', newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        assigned_numbers.append(row[1])

print('Un-assinged numbers')
print(set(inventory_numbers) - set(assigned_numbers))

输出:

Un-assinged numbers
{'13079', '13055', '13085'}

建议:

  • 在你的代码中 empty_list = tele 对我来说很奇怪。在这里,您正在替换信息。请检查。
  • dict 很棒,但您的情况不需要。