#python #json
Вопрос:
тест.json
{
"A Company":[{"female":["Jessica","Eve"]},{"male":["Mike","Peter"]}],
"B Company":[{"female":["Laura","Pamela"]},{"male":["Mark","Steve"]}]
}
test.py
import json
f = open('test.json',)
data = json.load(f)
for v in data.values():
for element in v:
print(element)
Выход:
{'female': ['Jessica', 'Eve']}
{'male': ['Mike', 'Peter']}
{'female': ['Laura', 'Pamela']}
{'male': ['Mark', 'Steve']}
Как я могу напечатать это: «Привет, Джессика», «Привет, Ева», «Привет, Лора», «Привет, Памела»?
Комментарии:
1. Что вы пробовали и что пошло не так с вашими попытками?
2. Повторите все сначала
element.get('female', [])
.
Ответ №1:
Вы можете использовать итератор для извлечения имен затем и цикл для печати приветствий без создания промежуточного списка:
data = {
"A Company":[{"female":["Jessica","Eve"]},{"male":["Mike","Peter"]}],
"B Company":[{"female":["Laura","Pamela"]},{"male":["Mark","Steve"]}]
}
names = (name for groups in data.values()
for group in groups
for name in group.get("female",[]))
for name in names: print("Hello",name)
Hello Jessica
Hello Eve
Hello Laura
Hello Pamela
Ответ №2:
Вы пропустили самый внутренний цикл, где вы повторяете внутренние записи и проверяете, являются ли они мужчинами или женщинами.
Пожалуйста, посмотрите пример:
import json
json_file = """
{
"A Company":[{"female":["Jessica","Eve"]},{"male":["Mike","Peter"]}],
"B Company":[{"female":["Laura","Pamela"]},{"male":["Mark","Steve"]}]
}
"""
parsed = json.loads(json_file)
for val in parsed.values():
for record in val:
# This below is the innermost loop
for key, value in record.items():
# If it's female then we use list comprehension to print the greetings
if key == "female":
[print(f"Hello {name}") for name in value]
Комментарии:
1. Я бы предложил использовать обычный цикл for вместо понимания списка, так как вы просто генерируете список, который выбрасываете.