2016-05-10 3 views
0

Ich habe WörterbuchDelete-Paare aus Wörterbuch Python mit

Counter({'183019767': 1075, '291781172': 929, '24710024': 608, '211884417': 576, '154037610': 351, '165402000': 248, '20649754': 218, '134275433': 196, '110893265': 185, '261966422': 177, '5706248': 169, '30453150': 142, '132880803': 121,'324020417': 32, '18372999': 32, '332474699': 32, '1296153': 32, '85179': 31, '174448039': 31, '142345622': 30, '151209537': 22, '135837721': 21, '64417676': 21, '350093413': 21, '189194442': 20, '40024441': 20, '8605568': 19, '9653942': 19, '38236943': 18, '136540780': 18, '142929569': 18, '68806963': 18)} 

Ich brauche Paare zu löschen, wo value < 30 Ich versuche

for keys in count_id: 
    if count_id.values() < 30: 
     del count_id[keys] 

Aber es funktioniert nicht. Was ich falsch mache?

Antwort

0

Sie sagen, wenn die Liste weniger als 30 anstelle des Werts ist.

tun if count_id[keys] < 30: statt

0

Ich schlage vor, eine Liste nehmen alle Schlüssel zu speichern, deren Werte kleiner als 30 und dann versuchen, die Elemente aus dem Wörterbuch zu löschen.

li =[] 
for key in count_id.keys(): 
    if count_id[key] <30: 
     li.append(key) 
for key in li: 
    del count_id[key] 

Ich hoffe, es hilft.

0

Sie sollten auch Ihr Wörterbuch kopieren, bevor Sie Werte löschen.

temp =count_id.copy() 
for keys in count_id.keys(): 
    if count_id[keys] < 30: 
     del temp[keys] 
+0

Wont dies einen Fehler wie RuntimeError geben: Wörterbuch geändert s Ize während der Iteration ?? – San

+0

@San wenn Sie nicht kopieren, dann erhalten Sie den Laufzeitfehler – Ashish

0

Diese erhalten Sie einen Fehler geben:

RuntimeError: dictionary changed size during iteration

Sie sollten entweder eine Kopie der Schlüssel des Gegen iterieren:

for k in list(count_id.keys()): 
    if count_id[k] < 30: 
     del count_id[k] 

Oder einen neuen Zähler erstellen:

new_count_id = Counter({k: v for k, v in count_id.iteritems() if v >= 30}) 
Verwandte Themen