从 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
很棒,但您的情况不需要。
我在列表中列出了 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
很棒,但您的情况不需要。