Здравствуйте, как мне пройтись по такому эллементу и изменить нужные мне значения, а то я пройтись могу. а вот собрать обратно в такой же эллемент чет не получается.
myDict = {"One" : [ {"Lol": 1}, {"Lol": 2} ], "Two" : [ {"Kek": 1}, {"Kek": 2} ] }
вот , нужно все слова , ключи , и значения проверить, чтобы небыло слова "o" например. И собрать в такое же состояние myDict но "o" поменять на "а"
Python
> {'Ane': [{'Lal': 1}, {'Lal': 2}], 'Twa': [{'Kek': 1}, {'Kek': 2}]}
Не рассмотрены варианты, когда ключи не являются строками.
Pyhon обычный перебор
Не хотелось пересобирать новый объект, можно было на месте создавать новые ключи и удалять старые. А оказ-ца питон выдает ошибку, если в цикле удалять ключи.
В таком случае очень хочется считерить - превратить объект в строку, тупо заменить в строке все `o` на `a` и снова полученную строку сделать словарем.
В таком случае очень хочется считерить - превратить объект в строку, тупо заменить в строке все `o` на `a` и снова полученную строку сделать словарем.
import json
import re
myDict = {"Oneo" : [ {"Lol": 1}, {"Lol": 2} ], "Two" : [ {"Kek": 1}, {"Kek": 2} ] }
string = json.dumps(myDict)
def replacer(re_match):
return re_match.group(0).replace('o', 'a').replace('O', 'A')
string = re.sub(r'".*?o.*?"\s*:', replacer, string, flags=re.IGNORECASE)
myDict = json.loads(string)
print(myDict)
Хотя можно и руками пересобрать. Ну это писец. def replace(key):
return key.replace('o', 'a').replace('O', 'A')
def moo(old, new):
for key in old:
new_key = replace(key)
new[new_key] = []
for dict_ in old[key]:
new_dict = dict()
new[new_key].append(new_dict)
for key2 in dict_:
new_key2 = replace(key2)
new_dict[new_key2] = dict_[key2]
return new
###
myDict = {"Oneo" : [ {"Lol": 1}, {"Lol": 2} ], "Two" : [ {"Kek": 1}, {"Kek": 2} ] }
newDict = moo(myDict, dict())
print(myDict)
print(newDict)
Вложение не глубокое - сделал цикл в цикле, иначе легче было бы написать хитрую рекурсию.
Dauren Aleshov
А зачем replacer, если нужно просто о на а поменять?
Askar Abdirov
Спасибо , за ответ. Но все таки, есть причина почему мне надо пройтись по каждому эллементу и пересобрать обьект. У меня в обьекте есть байт код. То что Вы сделали, оно не подойдет.
Askar Abdirov
Ой не заметил 2 часть ответа, сейчас гляну. Спасиб =)
Askar Abdirov
Круто, я не Python программист, но вы крутой =) надеюсь это мне поможет в моем задании )
Askar Abdirov
Оке, разберусь. Пасиб! =)
import re
def repl(s):
return re.sub(('o'),
lambda x: 'Aa'[x[0].islower()],
s,
flags=re.I) \
if isinstance(s, str) else s
def foo(d):
res = dict()
for key in d:
if isinstance(d[key], list):
res[repl(key)] = [foo(x) for x in d[key]]
elif isinstance(d[key], str):
res[repl(key)] = repl(d[key])
else:
res[repl(key)] = d[key]
return res
> foo(myDict)> {'Ane': [{'Lal': 1}, {'Lal': 2}], 'Twa': [{'Kek': 1}, {'Kek': 2}]}
Не рассмотрены варианты, когда ключи не являются строками.
Похожие вопросы
- Как (новичку по программированию) прописать программу для переборов комбинаций без повторений.
- Напишите код по перебору числа на Python.
- Как запустить метод перебора для уравнения
- почему самоучилка по программированию для чайников сложна в понимании обычным человеком, не подготовленном к этому?
- С предварительной заменой SQL на обычную запись в файл в эмуляторе "записной книжки" дело движется, только вот (...)
- Фото Пейзажи. С обработкой НЕ перебор?
- Урок по фотошопу в картинках, допустимо ли подобное размытие по Гауссу? или перебор?
- Разница в 14 лет - это ведь для обычных людей перебор?
- Пить 2-3 литра воды в день (при обычном образе жизни ) это перебор ?
- Подскажите новичку, какая видяха пойдет сюда, чтобы не перебор, в пределах разумного (ПК не обычный очень) +