Как отфильтровать данные?

danforth
На сайте с 18.12.2015
Offline
153
#31

Sly32, перечитай я там выше писал, у тебя не JSON. Как в изначальной задаче, так и в примере что должно получится.

Junior Web Developer
Sly32
На сайте с 29.03.2012
Offline
302
#32
Sitealert:
Этой строкой я сразу сформирую нужный список. И не нужны будут никакие ужимки и прыжки.

Есть условие задачи, есть исходные данные - твой ответ ни разу не подходит под них. Я не вижу код, который могу запустить и посмотреть как он отрабатывает

---------- Добавлено 13.06.2020 в 15:24 ----------

danforth:
Sly32, перечитай я там выше писал, у тебя не JSON

Да, не JSON, это IterableObject, попытался универсально упростить. Исходные данные можно рассматривать как список json-ов, для упрощения и решать исходя из этого, что бы не привязываться к питоновским понятиям

S
На сайте с 30.09.2016
Offline
469
#33
Sly32:
Есть условие задачи, есть исходные данные - твой ответ ни разу не подходит под них.

А я тебе показал, как получить правильные данные, исходя из твоего заявления

Sly32:
Данные приходят на бэкенде из базы данных
Я выиграл твою олимпиаду, давай мой приз.
Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
Sly32
На сайте с 29.03.2012
Offline
302
#34
Sitealert:
А я тебе показал, как получить правильные данные, исходя из твоего заявления

Если бы я мог фильтровать на уровне базы - я бы так и сделал, я работаю уже с полученными данными и не бегаю в базу каждый раз. Я же не стал уточнять, что данные хранятся в DynamoDB - noSQL базе и твой запрос вообще никак не поможет. Есть разные варианты и условия - в задаче нужно обработать один из них.

Если не хватает знаний - не стоит и лезть с непонятными ответами.

Gerga
На сайте с 02.08.2015
Offline
94
#35

Sly32, как вариант php без foreach:


$excludeCategories = 'promo|xxx';

$data = preg_replace(
"/{(.*?)'media_category': '({$excludeCategories})'(.*?)},/",
'',
$data
);
Sly32
На сайте с 29.03.2012
Offline
302
#36

Gerga, Спасибо за ответ. В данном варианте вы исходные данные сначала будете должны преобразовать в строку и уже потом по ней делать поиск и замену, правильно?

Gerga
На сайте с 02.08.2015
Offline
94
#37

Sly32, эти данные:


[ {'id': 0, 'media_category': 'clip'},
{'id': 1, 'media_category': 'promo'},
{'id': 2, 'media_category': 'promo'},
{'id': 3, 'media_category': 'start'},
{'id': 3, 'media_category': 'video'},
{'id': 3, 'media_category': 'anime'},
{'id': 3, 'media_category': 'promo'},
{'id': 4, 'media_category': 'clip'},
{'id': 4, 'meda_category': 'promo'},
{'id': 6, 'media_category': 'xxx'},
]

разве не текстовая строка Json формата?

S
На сайте с 30.09.2016
Offline
469
#38
Sly32:
Если не хватает знаний - не стоит и лезть с непонятными ответами.

Это у тебя не хватает знаний, чтобы чётко сформулировать задачу.

Ты получил непонятно какие данные непонятно в какой среде непонятно какими средствами, и хочешь их обработать непонятно на каком языке.

danforth
На сайте с 18.12.2015
Offline
153
#39

Sly32, а ты как это решишь, свою же задачу? Вот у тебя есть JSON файл с твоим содержимым, допустим файл на 10ГБ и там пару десятком миллионов строк:


[ {
"id": 0,
"media_category": "clip"
},
{
"id": 1,
"media_category": "promo"
},
{
"id": 2,
"media_category": "promo"
},
{
"id": 3,
"media_category": "start"
},
{
"id": 3,
"media_category": "video"
},
{
"id": 3,
"media_category": "anime"
},
{
"id": 3,
"media_category": "promo"
},
{
"id": 4,
"media_category": "clip"
},
{
"id": 4,
"meda_category": "promo"
},
{
"id": 6,
"media_category": "xxx"
}
]

Условия те же, покажи как ты откроешь файл и отфильтруешь строки

T7
На сайте с 19.09.2018
Offline
63
#40
Sly32:
истинные питоисты вспомнили бы про фильтры и лямды

Я не истинный 😂 Питон, только по мере надобности. Но, признаю, на питоне, относительно пхп многие вещи делаются гораздо короче, проще и иногда элегантней. Хотя в данной задаче это не очевидно:

$a = array_filter($a, function($v) { return !in_array( _arr($v, 'media_category'), [ 'promo', 'xxx' ] ); });

По своему все правы в зависимости от того как была понята задача. Можно и на уровне запроса. Если по какой то причине в фильтр запроса (например фуллтекст) не рекомендуется, можно и надстройку написать, где предусмотреть коллбак, который посмотрит в текущем курсоре и не добавит в ответ если что не так:

    $ooo = Core::dbmo()

-> resultCallback(
function($doc, $filter=null){
if( in_array(_arr($doc, 'media_category'), ['bad1', 'bad2'])) return null;
# ......
return $doc;
}
) -> find('zap',
[ '$text'=>['$search'=>'отфильтровать данные']
],
[ 'limit'=>1000,
'projection'=>[ 'score' => ['$meta' => 'textScore'],
#........
],
'sort' => [ 'score' => ['$meta' => 'textScore']
]
]
)->rows();


---------- Добавлено 13.06.2020 в 17:37 ----------

Gerga:
разве не текстовая строка Json формата

Вроде неоднократно говорилось, что это вывод из бд. Т.е готовый лист словарей в терминах питона или массив массивов/объектов в терминах php/js

Ну типа

[<class 'dict'>, {'_id': 'eb527ced-03323e0e', 'name': '43253-6010-28(R4)', 'catid': '03323e0e', 'category': 'БОРТОВЫЕ АВТОМОБИЛИ', 'slug': 'kamaz-43253-6010-28-r4', 'fullslug': '/board-truck/kamaz-43253-6010-28-r4', 'hit': 0, 'new': 0, 'novinka': 0, 'akciya': 0, 'cena_po_akcii': 0, 'price': 174121830, 'artikul': 0, 'model': '43253', 'variant': '6010-28(R4)', 'modelid': '43253', 'variantid': '6010-28-r4', 'prm': {'name': '43253-6010-28(R4)', 'kolesnaya_formula': '4х2', 'oshinovka': 2, 'gruzopodemnost_t': 7.82, 'moschnost_ls': 245, 'moschnost_netto_ls': 236, 'kpp': 'ZF6', 'p_o_glavnoj_peredachi': 6.53, 'obem_platformy_m3': 9.3, 'spalnoe_mesto': '─', 'shiny': '10.00R20 11.00R20 11.00R22,5', 'bak_l': 350, 'tsu': '─', 'opisanie': 'МКБ, дв. Сummins 6ISBe4 245, система нейтрализ. ОГ(AdBlue), ТНВД BOSCH, КПП ZF6S1000, рестайлинг', 'vendor': 'KAMAZ'}, 'up': 1591518268.71459, 'upd': 1}]

данные в результате

async def do_sly32():

document = await db.xlsitems.find_one({'_id': 'eb527ced-03323e0e'})
print([type(document), document])
danforth:
JSON файл с твоим содержимым, допустим файл на 10ГБ

Иметь такой JSON, идея сама по себе сомнительная. Если это файл, то да, ваше решение наверное единственное здесь, которое как то решит задачу.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий