Dire che ho una lista di dicts che assomiglia a questo:Come posso verificare se la chiave esiste nell'elenco dei dit in python?
[{1: "a"}, {2: "b"}]
Qual è il modo divinatorio per indicare se una certa chiave è in una delle dicts nella lista?
Dire che ho una lista di dicts che assomiglia a questo:Come posso verificare se la chiave esiste nell'elenco dei dit in python?
[{1: "a"}, {2: "b"}]
Qual è il modo divinatorio per indicare se una certa chiave è in una delle dicts nella lista?
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]
Utilizzare la funzione any
con un generatore:
>>> 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
?
parsedData=[]
dataRow={}
if not any(d['url'] == dataRow['url'] for d in self.parsedData):
self.parsedData.append(dataRow)
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
dire che esiste, come posso ottenere il suo indice/indice del primo se ce ne sono alcuni? @ DSM – user2057574
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