2013-02-09 10 views

Odpowiedz

32

bym chyba napisać:

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

choć jeśli będą dużo dicts na tej liście może ponownie rozważyć swoje struktury danych.

Jeśli chcesz indeks i/lub słownika, gdzie pierwszy mecz zostanie znaleziony, jedno podejście jest użycie next i 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'}) 

Pozwoli to podnieść StopIteration czy to nie tam:

>>> 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 

Jeśli chcesz tego uniknąć, możesz złapać wyjątek lub przekazać next wartość domyślną, taką jak None:

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

Jak zauważył w komentarzach przez @drewk, jeśli chcesz dostać wiele indeksów zwracane w przypadku wielu wartości, można użyć wyrażeń listowych:

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

Powiedz, że istnieje, jak mogę uzyskać jego indeks/pierwszy indeks, jeśli jest ich kilka? @DSM – user2057574

+0

W ten sposób: '[i dla i, d w wyliczeniu (lod), jeśli 2 w d]' lub '[(i, d) dla i, d w wyliczeniu (lod), jeśli 2 in d]' jeśli chcesz cały dyktuje ... ' – dawg

2

Zastosowanie any funkcja z generatorem:

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

any zwraca True, jeżeli co najmniej jeden z elementów iterable przekazywane jest True. Ale naprawdę musisz wziąć pod uwagę, dlaczego nie masz wszystkich par key: value w jednym dict?

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

Aby zobaczyć w pojedynczym dictoray używamy „w” kluczowych:

key in dic_instance 

sprawdzić w wykazie słownika, iterację listy słownika i używania „każdej” funkcji, więc jeśli klucz znaleźć w dowolny ze słownika, nie będzie on dalej analizował listy.

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 
Powiązane problemy