Здравствуйте, как мне пройтись по такому эллементу и изменить нужные мне значения, а то я пройтись могу. а вот собрать обратно в такой же эллемент чет не получается.
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) Вложение не глубокое - сделал цикл в цикле, иначе легче было бы написать хитрую рекурсию. 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 литра воды в день (при обычном образе жизни ) это перебор ?
- Подскажите новичку, какая видяха пойдет сюда, чтобы не перебор, в пределах разумного (ПК не обычный очень) +
re.sub('o', 'a', string, flags=re.IGNORECASE))