首页 > 解决方案 > 在条件下删除python字典中的项目

问题描述

假设我有这本词典

{0: ['replaced scanner user properly working cage replaced wire damaged stored later use',
  'replaced scanner'],
 1: ['scanner replaced station working well'],
 2: ['station scanner synced base station working'],
 3: ['printer offlineswitched usb portprinter online working'],
 4: ['replaced barcode label reflecting tcs ip address'],
 5: ['restarted thin client using ssh run restart command'],
 6: ['printer reconfigured test functioning normally', 'printer reconfigured'],
 7: ['removed old printer service installed replacement tested good'],
 8: ['tc required reboot rebooted tc aa signin dp functional'],
 9: ['resetting printer factory settings reconfigure'],
 10: ['updated windows forced update laptop operated normally'],
 11: ['printer settings set correct printer working correctly'],
 12: ['power printer disconnected reconnected working fine'],
 13: ['power cycled equipment restocked spooler plastic bubbles'],
 14: ['laptop checked ive logged paskiplacowepl without problem'],
 15: ['reseated scanner cables connection usb port resolve issue'],
 16: ['red scanner reconfigured base rebooted via usb joint'],
 17: ['tested printer station connected working resolved'],
 18: ['reconfigured printer media print properly'],
 19: ['replaced defective device fresh imaged laptop'],
 20: ['reconfigured scanner base tested aa fine'],
 21: ['printer unplugged usb port working properly'],
 22: ['reimaging laptop corrected anyconnect software issue'],
 23: ['reconfigured scanner confirmed scans intended'],
 24: ['reconnected usb cable reassign printer ports port'],
 25: ['plugged usb cable port scanner works'],
 26: ['cleared linux print queue working'],
 27: ['user reset password successfully closing tt'],
 28: ['reset printer get print'],
 29: ['reconfigured hand scanner linked station'],
 30: ['replaced scanner station functional', 'replaced scanner'],
 31: ['laptops battery needed reset asset serial'],
 32: ['printer reconfigured'],
 33: ['upgraded rebooted station'],
 34: ['deploying replacement scanner'],
 35: ['replaced scanner'],
 36: ['updated pc'],
 37: ['tc reimage']}

你可以看到这个键035有相同的字符串。我想35删除。我将如何以最好的 Python 方式概括这个过程?

标签: python

解决方案


您可以创建所有值的列表并检查该值是否已存在于列表中。如果是,则将其从值列表中删除。用值替换原始列表。如果找到一个空列表,则存储该键,以便在完成迭代后将其从字典中弹出。

#dict_vals has the original list.

consolidated_vals = [] # to store all values from the list
popkeys = [] #to store keys that need to be deleted

#iterate thru the full dictionary
for k,vals in dict_vals.items():
    
    #check if each value in the values list was already in the list. if found, ignore
    x = [v for v in vals if v not in consolidated_vals]
   
    #if list is empty (all values were already found in the list earler), then store key to pop
    if x:
        consolidated_vals += x  #store new values to the consolidated values list
        dict_vals[k] = x  #replace old values with new values as there may have been a value removed
    else:
        popkeys.append(k)  #store key to pop after iterating thru full list

#now pop all the keys that had 100% match for values already found

for pkeys in popkeys: dict_vals.pop(pkeys)

print (dict_vals)

其输出将是:

{0: ['replaced scanner user properly working cage replaced wire damaged stored later use', 'replaced scanner'], 
 1: ['scanner replaced station working well'], 
 2: ['station scanner synced base station working'], 
 3: ['printer offlineswitched usb portprinter online working'], 
 4: ['replaced barcode label reflecting tcs ip address'], 
 5: ['restarted thin client using ssh run restart command'], 
 6: ['printer reconfigured test functioning normally', 'printer reconfigured'], 
 7: ['removed old printer service installed replacement tested good'], 
 8: ['tc required reboot rebooted tc aa signin dp functional'], 
 9: ['resetting printer factory settings reconfigure'], 
10: ['updated windows forced update laptop operated normally'], 
11: ['printer settings set correct printer working correctly'], 
12: ['power printer disconnected reconnected working fine'], 
13: ['power cycled equipment restocked spooler plastic bubbles'], 
14: ['laptop checked ive logged paskiplacowepl without problem'], 
15: ['reseated scanner cables connection usb port resolve issue'], 
16: ['red scanner reconfigured base rebooted via usb joint'], 
17: ['tested printer station connected working resolved'], 
18: ['reconfigured printer media print properly'], 
19: ['replaced defective device fresh imaged laptop'], 
20: ['reconfigured scanner base tested aa fine'], 
21: ['printer unplugged usb port working properly'], 
22: ['reimaging laptop corrected anyconnect software issue'], 
23: ['reconfigured scanner confirmed scans intended'], 
24: ['reconnected usb cable reassign printer ports port'], 
25: ['plugged usb cable port scanner works'], 
26: ['cleared linux print queue working'], 
27: ['user reset password successfully closing tt'], 
28: ['reset printer get print'], 
29: ['reconfigured hand scanner linked station'], 
30: ['replaced scanner station functional'], 
31: ['laptops battery needed reset asset serial'], 
33: ['upgraded rebooted station'], 
34: ['deploying replacement scanner'], 
36: ['updated pc'], 
37: ['tc reimage']}

注意这里删除了键 32 和 35。


推荐阅读