The Wayback Machine - https://web.archive.org/web/20201118134450/https://github.com/Pythonicos/qdict
Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Query Dictionary

Instalação

> pip install qdict

Sobre

Executa uma consulta em um Iterável (List[dict], dict, List[Tuple[key, value]]) e aplica o filtro.

O filtro é aplicado horizontalmente acompanhando a iteração das chaves da query, ou seja, quando a query tem uma chave e essa chave não é um operador e seu valor é um dicionário, é isolado este dicionário de dentro da query e do objeto a ser verificado.

Atenção: Caso o objeto não possua a chave especificada na query, o objeto não será retornado nos resultados finais.

Operadores

Todos os operadores respeitam o nível dos objetos.

$or: lista de queries.

from qdict import find

obj = [{"a": 1, "b": {"c": "Positive"}}, {"a": 1, "b": {"c": "Negative"}},
           {"a": 1, "b": {"c": "Undefined"}}, {"a": 1}]
result = find(obj, {
    "$or": [{"b": {"c": "Positive"}},
            {"$not": {"$has": "b"}}]
})
r = list(result)
print(r)  # [{'a': 1, 'b': {'c': 'Positive'}}, {'a': 1}]

$not: negativa a expressão

{"a": {"$not": 1}}

$custom: Define um método dinamicamente. (func, keyname1, keyname2, ..., keynameN). Cada keyname será um parâmetro com o valor da chave ou None

from qdict import find
obj = [
    {"a": 1, "b": True, "c": {"a": 1}, "d": {"a": 1}},
    {"a": 3, "b": False, "c": {"a": 6}}
]

def pair(num):
    return num % 2 == 0

query = {
    "c": {"$custom": (pair, "a")}
}
print(list(find(obj, query)))  # [{"a": 3, "b": False, "c": {"a": 6}}]

$has: verifica se o objeto contém a chave

$contains: Se a lista (objeto) contém o item (query)

$in: Se o valor (objeto) está contido na lista (query)

Exemplos

from qdict import find

# simple search
obj = [{"a": 1, "b": False}, {"a": 2, "b": True}, {"b": True}]
result = find(obj, {"b": True})
print(list(result))  # [{'a': 2, 'b': True}, {'a': 3, 'b': True}]
result = find(obj, {"$has": "a"})
print(list(result))  # [{'a': 1, 'b': False}, {'a': 2, 'b': True}]
result = find(obj, {"$not": {"$has": "a"}})
print(list(result))  # [{'b': True}]

# search with subkeys
obj = [{"a": 1, "b": {"c": "Positive"}}, {"a": 1, "b": {"c": "Negative"}},
       {"a": 1, "b": {}}]
result = find(obj, {"b": {"c": "Negative"}})
print(list(result))  # [{'a': 1, 'b': {'c': 'Negative'}}]

# $or
obj = [{"a": 1, "b": {"c": "Positive"}}, {"a": 1, "b": {"c": "Negative"}},
       {"a": 1, "b": {"c": "Undefined"}}, {"a": 1}]
result = find(obj, {
    "$or": [{"b": {"c": "Positive"}},
            {"$not": {"$has": "b"}}]
})
print(list(result))  # [{'a': 1, 'b': {'c': 'Positive'}}, {'a': 1}]

Releases

  • 1.3.0 - Fix packages
  • 1.1.0 - Fix custom char operator - added greater than, greater than equal, less than and less than equal
  • 1.0.0 - Initial Release
You can’t perform that action at this time.