Powiedz, mam listę dicts, który wygląda tak:Jak mogę sprawdzić, czy klucz istnieje na liście dyktowanych w pythonie?
[{1: "a"}, {2: "b"}]
Jaki jest pythonic sposób, aby wskazać, czy dany klucz znajduje się w jednej z dicts w liście?
Powiedz, mam listę dicts, który wygląda tak:Jak mogę sprawdzić, czy klucz istnieje na liście dyktowanych w pythonie?
[{1: "a"}, {2: "b"}]
Jaki jest pythonic sposób, aby wskazać, czy dany klucz znajduje się w jednej z dicts w liście?
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]
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
?
parsedData=[]
dataRow={}
if not any(d['url'] == dataRow['url'] for d in self.parsedData):
self.parsedData.append(dataRow)
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
Powiedz, że istnieje, jak mogę uzyskać jego indeks/pierwszy indeks, jeśli jest ich kilka? @DSM – user2057574
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