2017-03-26 2 views
1
[{'YEAR': 2016.0, 'DOY': 310.0, 'temperature': 12.55, 'min_temp': 10.61, 'max_temp': 14.19, 'field_id': 1, 'date': Timestamp('2016-11-05 00:00:00')}, {'YEAR': 2016.0, 'DOY': 311.0, 'temperature': 14.89, 'min_temp': 12.6, 'max_temp': 17.49, 'field_id': 1, 'date': Timestamp('2016-11-06 00:00:00')}] 

In der obigen Liste der Wörterbücher, möchte ich nur die folgenden beibehalten. Tasten in dieser Liste:Entfernen bestimmter Schlüssel aus einer Liste von Wörterbuch

Von Filter dict to contain only certain keys?, kann ich die dict nur auf bestimmte Tasten wie folgt filtern:

new_dict = { your_key: old_dict[your_key] for your_key in your_keys } 

- UPDATE: Die Lsg sollten auch funktionieren, wenn ein Schlüssel aus your_key nicht existiert im Wörterbuch

+0

'[{your_key: subdict [your_key] für your_key in your_keys} für subdict in dict_list]' –

+0

Dank @JohnGalt und @juanpa, Ihre soln funktioniert nicht, wenn ein Schlüssel in 'your_key' nicht im Wörterbuch existiert – user308827

+0

Schnellkorrektur:' {{your_key: Untersuche [your_key] für your_key in your_keys, wenn your_key in subdic} für subdict in dict_list] ' –

Antwort

2

list comprehension mit dict Verständnis Kombinieren Sie eine Liste der Wörterbücher zu erhalten:

>>> lst = [{'YEAR': 2016.0, 'DOY': 310.0, 'temperature': 12.55, 
      'min_temp': 10.61, 'max_temp': 14.19, 'field_id': 1, 
      'date': Timestamp('2016-11-05 00:00:00')}, 
      {'YEAR': 2016.0, 'DOY': 311.0, 'temperature': 14.89, 
      'min_temp': 12.6, 'max_temp': 17.49, 'field_id': 1, 
      'date': Timestamp('2016-11-06 00:00:00')}] 
>>> keys_to_retain = ['YEAR', 'temperature'] 
>>> [{key: d[key] for key in keys_to_retain} for d in lst] 
[{'YEAR': 2016.0, 'temperature': 12.55}, {'YEAR': 2016.0, 'temperature': 14.89}] 

UPDATE nach der Frage Änderung

Um die dict Verständnis der Arbeit, auch wenn Schlüssel aus your_key existieren nicht im Wörterbuch zu machen, verwenden Sie if Klausel:

[{key: d[key] for key in keys_to_retain if key in d} for d in lst] 
             ^^^^^^^^^^^ 

Alternativ, wenn Sie das Ergebnis wollen dicitonaries haben Standardwert für Schlüssel fehlt, können Sie dict.get mit Standardwert anstelle von dict[..]:

[{key: d.get(key, 'default_value') for key in keys_to_retain} for d in lst] 
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
1

Eine weitere Lösung mit Pop

mydict = [{'YEAR': 2016.0, 'DOY': 310.0, 'temperature': 12.55, 'min_temp': 10.61, 'max_temp': 14.19, 'field_id': 1}, 
      {'YEAR': 2016.0, 'DOY': 311.0, 'temperature': 14.89, 'min_temp': 12.6, 'max_temp': 17.49, 'field_id': 1}] 

filter_list = ['YEAR','temperature'] 

# get all the keys to be removed. 
c = list(set(mydict[0].keys())-set(filter_list)) 

# remove all the key,value for each dict in the list 
[i.pop(cc) for i in mydict for cc in c] 
print mydict 

Ergebnisse in

[{'temperature': 12.55, 'YEAR': 2016.0}, {'temperature': 14.89, 'YEAR': 2016.0}] 
Verwandte Themen