2016-12-01 5 views
0

ich die folgenden Beispieldaten als Listobject in Python haben.Wie Schlüssel von mehreren Wörterbüchern in einer Liste Python löschen

[{'itemdef': 10541, 
    'description': 'Dota 2 Just For Fun tournament. ', 
    'tournament_url': 'https://binarybeast.com/xDOTA21404228/', 
    'leagueid': 1212, 
    'name': 'Dota 2 Just For Fun'}, 
{'itemdef': 10742, 
    'description': 'The global Dota 2 league for everyone.', 
    'tournament_url': 'http://www.joindota.com/en/leagues/', 
    'leagueid': 1640, 
    'name': 'joinDOTA League Season 3'}] 

Wie kann ich die Beschreibung, tour_url aus dieser Liste entfernen; oder wie kann ich nur den Namen und die Ligaid-Schlüssel behalten. Ich habe verschiedene Lösungen ausprobiert, aber es scheint einfach nicht zu funktionieren.

2. Frage: Wie kann ich diese Liste filtern? Wie in Mysql:

select * 
from table 
where leagueid = 1212 

Bitte behandeln Sie mich wie eine neue Person zu Python, weil ich wirklich bin.

Antwort

2

In der Tat list keine Schlüssel haben, list Indizes hat, und dictionary hat Tasten . In Ihrem Fall haben Sie eine Liste der Wörterbücher, und was müssen Sie sind einige Schlüssel zu entfernen (2 genau: Beschreibung und tournament_url) bildet jedes Element (Wörterbuch) der Liste:

for item in my_list: # my_list if the list that you have in your question 
    del item['description'] 
    del item['tournament_url'] 

Um ein Element abrufen aus Ihre oben aufgeführte Liste mit einigen Kriterien, können Sie tun:

[item for item in my_list if your_condition_here] 

Beispiel:

>>> [item for item in my_list if item['itemdef'] == 10541] 
[{'leagueid': 1212, 'itemdef': 10541, 'name': 'Dota 2 Just For Fun'}] 

Edit:

my_list Elemente zu filtern, um nur einige Schlüssel abrufen, können Sie tun:

keys_to_keep = ['itemdef', 'name'] 

res = [{ key: item[key] for key in keys_to_keep } for item in my_list] 
print(res) 
# Output: [{'itemdef': 10541, 'name': 'Dota 2 Just For Fun'}, {'itemdef': 10742, 'name': 'joinDOTA League Season 3'}] 
+0

ist da a Unterschied zwischen 'del' und' item.pop'? – rassar

+0

Warte, also habe ich eine Liste von Wörterbüchern? Verdammt, vielen Dank. Ich war für immer an dieser Scheiße fest. – Adam

+0

@rassar 'item.pop ('key')' gibt auch den Wert des Schlüssels zurück, so dass er verwendet wird, wenn wir ein Objekt lesen und löschen müssen. – Pavel

0

Für die erste Frage:

for item in table: 
    item.pop(tournament_url) 

Für die zweite Frage:

[item for item in table if item[leagueid] == 1212] 
+0

Können Sie erklären, wie man das zweite Stück Code zu benutzen? – Adam

+0

@ Adam gibt es drei gleichwertige Varianten zur Verfügung: http://pastebin.com/miyEgkVY – Pavel

-1

Also, was Sie haben dort eine Liste der Wörterbücher ist. Um die tournament_url Schlüssel aus den Wörterbüchern zu entfernen, werden wir ein Wörterbuch Verständnis verwenden

my_list = [{k:v for k, v in d.items() if k != 'tournament_url'} for d in my_list] 

Lesen Sie mehr über Comprehensions im official python documentation

+1

Dies wird die Liste und alle die Wörterbücher erstellen. Es ist einfacher und schneller, über die Liste zu iterieren und die nicht benötigten Schlüssel zu entfernen. – Holloway

+0

print [{key: Wert für key, value in d [x] .items() if key! = 'Tournament_url' und key! = 'Description'} für x in range (len (d))] –

Verwandte Themen