
Gnobitel
03.03.2017
00:50:14
обойти
но после того как преобразуешь через loads, они имеют другие расположения в словаре
Походу придется каждый ключ проверять на все возможные варианты
Это так-то как-то не очень

Google

Gnobitel
03.03.2017
00:54:11
точнее ключи immutable

Софи
03.03.2017
01:05:37

Gnobitel
03.03.2017
01:08:15
OrderedDict?
нет смысла, я хотел индекс обхода по каждому словарю привзать к определенному унифицированному полю, но для каждого api индекс будет разный
короче для каждого поля создавать только листы со всеми возможными вариантами ключа и сверять
Короче, покажу на адекватном примере что надо
[
{
"orderID": "32342302010102",
"total": "9.99",
"last_4": "1111",
"description": "Services rendered"
}
]
раз api
[
{
"id": "42d213d2-cdc2-4655-99ec-9335b91c9a8f",
"amount": "20.99",
"last_4": "1111",
"memo": "For the bill"
}
]
два api
надо чтобы на выходе у обоих были одинаковые наименования ключей

Софи
03.03.2017
01:16:18
из двух сделать один?
проверяем ключи. пересоздаем нужные. удаляем старые ненужные. профит?

Google

Gnobitel
03.03.2017
01:18:56
дело то не в этом, дело в том что каждый ключ всеравно придется обходить, кол-во api может быть больше, как и выборка может состоять более чем из одной записи в листе

Софи
03.03.2017
01:19:22
а еще есть интересный метод dict.fromkeys
обходить, выдирать ключи. экстрасенсорно не узнать, что вот тута и вот здеся надо заменить ключ
ибо мы не знаем что там вообще лежит
можно лишь подумать и оптимизировать. чтобы не полный тупой перебор был
ну и вопрос нагрузки/объема данных. а то так до байтоебства можно дойти. ибо медленно

Gnobitel
03.03.2017
01:21:25
просто придется создавать 4 листа для id, total, last_4 и details со всеми вариантами наименований ключей
а потом обходить и проверять в каком содержится

Софи
03.03.2017
01:22:06
так. надо свести много апи в один или наоборот?

Gnobitel
03.03.2017
01:22:17
да много апи в один

Софи
03.03.2017
01:23:07
создать список или словарик с заменами
обойти

Gnobitel
03.03.2017
01:23:14
ну например поле id. Создаешь лист ids = ["orderID","id"]

Софи
03.03.2017
01:23:44
только учитывай. там число. а там строка с GUID

Gnobitel
03.03.2017
01:24:39
если из этого листа совпал ключ, то создаешь в новой структуре ключ с унифицированным имнем для id/ Значения мне вообще не надо трогать

Софи
03.03.2017
01:25:09
вроде бы все примитивно. по крайней мере для простого перебора
можно посмотреть методы для dict
есть items()
keys()

Google

Софи
03.03.2017
01:25:39
и прочие няшки

Gnobitel
03.03.2017
01:26:05
универсальности это не даст

Софи
03.03.2017
01:26:18
в каком смысле?
все-равно он не телепат и будет пологаться на словарь замен

Gnobitel
03.03.2017
01:27:27
в таком, что с появлением нового api, придется добавлять в листы новые возможные наименования в ручную
можно сделать универсальное с анализом значений и т.п. но по быстродействию это не то

Софи
03.03.2017
01:28:05
ну тут или цепляться за что-то. где-то прививать логику. можно и нейронную сеть, лол
а еще есть макаки
зачем делать супер-пупер распознаватель капчи, если в африке полно голодающих детей? (:
в таком случае надо ставить вопрос: как сделать так, чтобы оно само додумывалось как надо заменить
вообще как-то пахнет платежным шлюзом

Gnobitel
03.03.2017
02:14:26
А от чего зависит порядок расположения элементов в словаре? от сгенерированного хэша?

Софи
03.03.2017
02:15:55
точно не стоит полагаться на это
или OrderedDict, или последние версии python, где вроде dict - упорядоченный

Gnobitel
03.03.2017
02:16:23
Причем каждый объект
JSON

Софи
03.03.2017
02:17:30
просто в чем дело. dict - это словарь. key-value хранилище

Gnobitel
03.03.2017
02:17:31
Да и плюс разные наименования клбчей

Google

Софи
03.03.2017
02:17:40
задачи порядка там базово не стоят
https://habrahabr.ru/post/247843/

Gnobitel
03.03.2017
02:21:30


Софи
03.03.2017
02:21:59
Вернёмся к процедуре добавления элемента в словарь. После успешного добавления или обновления записи в хэш-таблице происходит сравнение следующей записи-кандидата на вставку. Если хэш или ключ у записей не совпадают, начинается пробирование. Происходит поиск «неиспользованной» ячейки для вставки. В данной реализации Python используется случайное (а если переменная perturb равна нулю – квадратичное) пробирование. Как было описано выше, при случайном пробировании индекс следующей ячейки выбирается псевдослучайным образом. Запись добавляется в первую найденную «неиспользованную» ячейку. То есть два ключа a и b, у которых hash(a) == hash(b), но a != b могут легко существовать в одном словаре. В случае если ячейка по начальному индексу пробы «пустая», произойдёт пробирование. И если первая найденная ячейка будет «нулевая», то «пустая» ячейка будет использована заново. Это позволяет перезаписать удалённые ячейки, сохраняя ещё неиспользованные.
Получается, что индексы добавляемых в словарь элементов зависят от уже находящихся в нём элементов, и порядок ключей для двух словарей, состоящих из одного и того же набора пар (ключ, значение), может быть разным и определяется очерёдностью добавления элементов:


Gnobitel
03.03.2017
02:22:22
Я фигею, мне с опытом в c++ 5 лет рассказывают, про контейнеры и как они реализованы)))

Софи
03.03.2017
02:23:37
откуда я знаю у кого какой опыт?
и почему человек с 5 летним опытом спрашивает как пропатчить json массив?

Admin
ERROR: S client not available

Gnobitel
03.03.2017
02:24:47
Пропатчить... Это называется merge или combine с unified keys
@aragaer единственный кто мне здесь что-то годное советовал :( что ж такое. Так понимаю еще спит.

Pavel
03.03.2017
02:53:27

Gnobitel
03.03.2017
02:58:45

Pavel
03.03.2017
03:00:08

Petr
03.03.2017
03:00:17

Gnobitel
03.03.2017
03:00:22

Petr
03.03.2017
03:00:27
надо таких наклеек наделать

Pavel
03.03.2017
03:08:10
Кого останавливал пипи от перехода на третий питон? Смотрите, что в мире творится.
PyPy Development: Async HTTP benchmarks on PyPy3
http://feedproxy.google.com/~r/PyPyStatusBlog/~3/tCdUWmN4ppk/async-http-benchmarks-on-pypy3.html
PyPy научился работать с asyncio

Gnobitel
03.03.2017
03:18:26

Google

Gnobitel
03.03.2017
03:20:28
блин что-то bold подвисает) минутку
def unifies_api(urls):
payment_id = ["id", "orderID"]
total = ["amount"]
last_4 = []
details = ["memo", "description"]
unified_api = []
for url in urls:
j = json.loads(requests(url).text)
for d in j:
for key in d:
if key in payment_id:
d["remote_payment_id"] = d.pop(key)
elif key in total:
d["total"] = d.pop(key)
elif key in last_4:
d["last_4"] = d.pop(key)
elif key in details:
d["details"] = d.pop(key)
unified_api = unified_api + j
return json.dumps(unified_api)
Извиняюсь, что-то целиком не хочет брать код bold

Dan
03.03.2017
03:26:38
json.loads(requests(url).text) -> requests(url).json()

Gnobitel
03.03.2017
03:28:59

Dan
03.03.2017
03:29:34

Gnobitel
03.03.2017
03:30:56
я еще не проснулся =)
что не работает ?
работает. Дело в другом, хочется что-то более универсальное при увеличении количества api и без добавления в ручную новых наименований в листы payment_id, total, last_4, details
Но мне кажется так не получится

Dan
03.03.2017
03:34:28
ну как вариант сделать payment_id, total, last_4, details не отдельными переменными а словарем

Gnobitel
03.03.2017
03:36:55

Dan
03.03.2017
03:40:07
правильно ли я понял что должнобыть что то вроде
x = {'a': 1, 'b': 2}
y = {'b': 3, 'c': 4}
{'a': 1, 'b': 3, 'c': 4}

Gnobitel
03.03.2017
03:40:29

Dan
03.03.2017
03:40:46
тогда показывай входные данные и что должно быть на выходе

Gnobitel
03.03.2017
03:41:30
[
{
"orderID": "32342302010102",
"total": "9.99",
"last_4": "1111",
"description": "Services rendered"
}
]
[
{
"id": "42d213d2-cdc2-4655-99ec-9335b91c9a8f",
"amount": "20.99",
"last_4": "1111",
"memo": "For the bill"
}
]
Это входные

Pavel
03.03.2017
03:41:38
https://gist.github.com/anonymous/3fe461daa20d24ea960411b6e9db66f2