在条件下删除python字典中的项

在条件下删除python字典中的项,python,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 offlineswitch

假设我有这本字典

{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']}

您可以看到键
0
35
具有相同的字符串。我想删除
35
。如何以最佳的Python方式概括此过程?

考虑到您只想删除相同的值,您可以执行以下dict理解:

temp = {val : key for key, val in your_dict.items()} 
res = {val : key for key, val in temp.items()}
print(res)

请注意,如果值相同,这将从字典中删除整个key:val。

您可以使用issubset方法查找列表中是否有重复项,然后将键值存储在必须删除的待删除列表中

dict1 = {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']}

toBeRemoved=set()
for x in dict1:
    for y in dict1:
        if(x!=y):
            if(set(dict1[x]).issubset(set(dict1[y]))):
                toBeRemoved.add(x)
for item in toBeRemoved:
    del dict1[item]
print(dict1)
输出

{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'], 33: ['upgraded rebooted station'], 34: ['deploying replacement scanner'], 36: ['updated pc'], 37: ['tc reimage']}

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

#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已被删除。

问得好。到目前为止,您做了什么来执行此操作?如何确定要删除的密钥?它们总是相邻的数字吗?在这种情况下,您应该使用列表,而不是字典。您是只需要从列表中删除值,还是希望列表中的所有值都是唯一的?如果您想将其保留为列表,有一个解决方案。如果您只是想要唯一值的列表,那么请使用不同的解决方案。请制作更好的MCVE。我们不需要查看包含30多个长字符串的词典就可以理解您的问题。至少还有一个键包含关联的
“替换的扫描仪”
字符串。您是否有理由希望
“替换的扫描仪”
保留键0而不是拥有自己的键?如果从30和35中删除
“替换的扫描仪”
,则它存储的唯一位置是在键0处的列表中。为什么不把它变成一个
{int:str}
字典,其中每个键都与一个且只有一个唯一的字符串相关联?