在条件下删除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}
字典,其中每个键都与一个且只有一个唯一的字符串相关联?