【发布时间】:2021-04-18 05:27:18
【问题描述】:
我有 300k+ 个来自 API 调用的单独字典,格式为:(1 个 API 调用将返回 1 个字典,因此以下每个字典都是成功连续 API 调用的结果,并且在每次 API 调用之后,代码都需要运行返回的字典)
{'N.': 'Sam', 'Batch': 2019, 'Sem': 'I', 'Sub': 'CAD', 'Files': 21, 'Type': 'dwg', 'Size(MB)': 98, 'uid': 732854}
{'N.': 'Sam', 'Batch': 2019, 'Sem': 'I', 'Sub': 'CAD', 'Files': 8, 'Type': 'pdf', 'Size(MB)': 42, 'uid': 735554}
{'N.': 'Sam', 'Batch': 2019, 'Sem': 'I', 'Sub': 'CAD', 'Files': 16, 'Type': 'docx', 'Size(MB)': 104, 'uid': 746748}
{'N.': 'Sam', 'Batch': 2019, 'Sem': 'I', 'Sub': 'CAD', 'Files': 8, 'Type': 'pptx', 'Size(MB)': 57, 'uid': 731024}
{'N.': 'Sam', 'Batch': 2019, 'Sem': 'I', 'Sub': 'CAM', 'Files': 8, 'Type': 'dwg', 'Size(MB)': 71, 'uid': 737328}
{'N.': 'Sam', 'Batch': 2019, 'Sem': 'I', 'Sub': 'CAM', 'Files': 8, 'Type': 'docx', 'Size(MB)': 22, 'uid': 376494}
{'N.': 'Sam', 'Batch': 2019, 'Sem': 'I', 'Sub': 'MIM', 'Files': 8, 'Type': 'pptx', 'Size(MB)': 28, 'uid': 687281}
{'N.': 'Sam', 'Batch': 2019, 'Sem': 'I', 'Sub': 'MIM', 'Files': 8, 'Type': 'docx', 'Size(MB)': 20, 'uid': 687231}
{'N.': 'Sam', 'Batch': 2019, 'Sem': 'I', 'Sub': 'MET', 'Files': 20, 'Type': 'pptx', 'Size(MB)': 204, 'uid': 457281}
我必须将上述单个词典附加到具有以下条件的词典列表中:
- dwg、pdf、bmp 是首选“类型”
- docx、pptx、xlsx 不是首选,仅在不存在上述任何格式时才考虑
- (N.) 名称、批次、Sem、(Sub) 主题、文件、大小可以是任何值,所有 dict 为同一个 ['N.','Batch','Sem','Sub'] 集因此,在各自的 API 调用中一个接一个地返回。
- uid 是每个字典的唯一编号。从不重复。
- 条目是相同的 ['N.','Batch','Sem','Sub'] 集。因此,如果最终列表中已经有任何条目(例如,如果已经有任何带有 docx/dwg/pdf/bmp 的条目,则具有非首选“类型”作为值的单个 dict存在,pptx不应该出现,)
- “类型”中没有首选和非首选的层次结构。例如:如果存在带有 pptx 的条目,则不应出现带有 docx 的另一个条目
- 最初列表为空。
因此,在上述数据中,只有以下数据才能进入最终列表:
[{'N.': 'Sam', 'Batch': 2019, 'Sem': 'I', 'Sub': 'CAD', 'Files': 21, 'Type': 'dwg', 'Size(MB)': 98, 'uid': 732854},
{'N.': 'Sam', 'Batch': 2019, 'Sem': 'I', 'Sub': 'CAD', 'Files': 8, 'Type': 'pdf', 'Size(MB)': 42, 'uid': 735554},
{'N.': 'Sam', 'Batch': 2019, 'Sem': 'I', 'Sub': 'CAM', 'Files': 8, 'Type': 'dwg', 'Size(MB)': 71, 'uid': 737328},
{'N.': 'Sam', 'Batch': 2019, 'Sem': 'I', 'Sub': 'MIM', 'Files': 8, 'Type': 'pptx', 'Size(MB)': 28, 'uid': 687281},
{'N.': 'Sam', 'Batch': 2019, 'Sem': 'I', 'Sub': 'MET', 'Files': 20, 'Type': 'pptx', 'Size(MB)': 204, 'uid': 457281},
...]
我尝试使用的代码:
list = []
dict = {'N.': name, 'Batch': year, 'Sem': semester, 'Sub': subject, 'Files': nofiles, 'Type': format, 'Size(MB)': size, 'uid': uniqueid}
comparekeys = ['N.','Batch','Sem','Sub']
nptype = ['docx', 'pptx', 'xlsx']
if dict not in list and format in nptype:
for key in comparekeys:
if dict[key] == (item[key] for item in list):
break
list.append(dict)
上面的代码还附加了非首选格式,如果列表中已存在条目,则无法查找。我也尝试过使用 zip()、set()、.keys(),但无法制定正确的代码。
【问题讨论】:
标签: python list dictionary search set