Mam zaludnioną listę wypełnioną w ten sposób
record.append([key, value1, count1, value2, count2])
ale gdy używam wbudowanej funkcji, to nie działa.
if k in record
jaki jest najbardziej elegancki sposób wyszukiwania wielowymiarowej listy w Pythonie?
Odpowiedzi:
2 dla odpowiedzi № 1Aby wyszukać klucz na liście, musisz przeszukać te wewnętrzne listy:
możesz użyć any
tutaj:
any(key in x for x in record)
lub jeśli klucz jest zawsze w pierwszym indeksie, to również zadziała:
any(key == x[0] for x in record)
albo użyj list.extend
aby dodać poszczególne pozycje do listy (zamiast całej listy), wtedy Twoja metoda będzie działać dobrze.
1 dla odpowiedzi nr 2
import operator
if key in map(operator.itemgetter(0),records): ...
jest to metoda, którą prawdopodobnie użyłbym, lub bardziej wydajna metoda, która spowoduje zwarcie bez powtarzania całej listy (według komentarza Ashwiniego)
import operator,itertools
if key in itertools.imap(operator.itemgetter(0),records): ...
ale tak naprawdę myślę, co naprawdę chcesz
def findRecord(key,records):
for r in records:
if r[0] == key:
return r
print findRecord("some_key",records)