2013-02-09 12 views

risposta

32

probabilmente sarei scrivo:

>>> lod = [{1: "a"}, {2: "b"}] 
>>> any(1 in d for d in lod) 
True 
>>> any(3 in d for d in lod) 
False 

anche se ci stanno per essere un sacco di dicts in questo elenco si potrebbe voler riconsiderare la vostra struttura dati.

Se si desidera che l'indice e/o il dizionario in cui si trova la prima corrispondenza, un approccio è quello di utilizzare next e enumerate:

>>> next(i for i,d in enumerate(lod) if 1 in d) 
0 
>>> next(d for i,d in enumerate(lod) if 1 in d) 
{1: 'a'} 
>>> next((i,d) for i,d in enumerate(lod) if 1 in d) 
(0, {1: 'a'}) 

Ciò consentirà di aumentare StopIteration se non è lì:

>>> next(i for i,d in enumerate(lod) if 3 in d) 
Traceback (most recent call last): 
    File "<ipython-input-107-1f0737b2eae0>", line 1, in <module> 
    next(i for i,d in enumerate(lod) if 3 in d) 
StopIteration 

Se si desidera evitare ciò, è possibile prendere l'eccezione o passare next un valore predefinito come None:

>>> next((i for i,d in enumerate(lod) if 3 in d), None) 
>>> 

Come notato nei commenti di @drewk, se si vuole ottenere di più gli indici restituiti nel caso di più valori, è possibile utilizzare una lista di comprensione:

>>> lod = [{1: "a"}, {2: "b"}, {2: "c"}] 
>>> [i for i,d in enumerate(lod) if 2 in d] 
[1, 2] 
+0

dire che esiste, come posso ottenere il suo indice/indice del primo se ce ne sono alcuni? @ DSM – user2057574

+0

Come questo: '[io per i, d enumerare (lod) se 2 in d]' o '[(i, d) per i, d enumerare (lod) se 2 in d]' se vuoi l'intero dettato ... ' – dawg

2

Utilizzare la funzione any con un generatore:

funzione
>>> d = [{1: "a"}, {2: "b"}] 
>>> any(1 in x for x in d) 
True 

any restituisce True, se almeno uno degli elementi della iterable passata è True. Ma hai davvero bisogno di considerare, perché non hai tutte le coppie key: value in un singolo dict?

1
parsedData=[] 
dataRow={} 
if not any(d['url'] == dataRow['url'] for d in self.parsedData): 
     self.parsedData.append(dataRow) 
0

di vedere in un'unica dictoray usiamo 'in' parola chiave:

key in dic_instance 

il check-in lista di dizionario, scorrere l'elenco dizionario e l'uso 'qualsiasi' la funzione, quindi se chiave trovata in qualsiasi del dizionario, non itererà ulteriormente la lista.

dic_list = [{1: "a"}, {2: "b"}] 
any(2 in d for d in dic_list) 
True 
any(4 in d for d in dic_list) 
False 
Problemi correlati