#python-3.x
#python-3.x
Вопрос:
l = ["a","b"]
d = {
"val1": { "a": {"a1": "vfvf", "a2": "ghbnnhn"},
"b": {"b1": "gghh", "b2": "nhghbfb"},
"c": {"c1": "fgggfgf ","c2 ":"hhggbfvfv"}
},
"val2": { "d": {"d1": "vfvf", "d2": "ghbnnhn"},
"e": {"e1": "gghh", "e2": "nhghbfb"},
"a": {"a_1": "fgggfgf ","a_2 ":"hhggbfvfv"}
}
}
Нужно проверить list 'l'
и print dictionary elements of corresponding list element
.
Код
for k,v in d.items():
if "a" in v:
print(d[k][a])
if "b" in v:
print(d[k][b])
Я думаю, что описанный выше подход является утомительным и отнимает много времени. Может ли это быть optimised
вместо two if loops
, как показано ниже?
for k,v in d.items():
if any(l) in v:
print(d[k][whichever_element_matches_above])
Или любой другой лучший подход, чем этот?
Ответ №1:
Вы можете сделать это в двойном понимании:
to_print = [
v2
for k,v in d.items()
for k2,v2 in v.items()
if k2 in l
]
print(to_print)
# [{'a1': 'vfvf', 'a2': 'ghbnnhn'}, {'b1': 'gghh', 'b2': 'nhghbfb'}, {'a_1': 'fgggfgf ', 'a_2 ': 'hhggbfvfv'}]
Ответ №2:
Если вы хотите использовать только один цикл for, вы можете использовать пакет itertools. Пример:
import itertools
l = ["a","b"]
d = {
"val1": { "a": {"a1": "vfvf", "a2": "ghbnnhn"},
"b": {"b1": "gghh", "b2": "nhghbfb"},
"c": {"c1": "fgggfgf ","c2 ":"hhggbfvfv"}
},
"val2": { "d": {"d1": "vfvf", "d2": "ghbnnhn"},
"e": {"e1": "gghh", "e2": "nhghbfb"},
"a": {"a_1": "fgggfgf ","a_2 ":"hhggbfvfv"}
}
}
keys_list = list(d.keys())
values_list = list(d.values())
for i, j in itertools.product(l,d.values()):
if i in j:
print(keys_list[values_list.index(j)],':', i, ':', j[i])
или
Вы можете использовать приведенный ниже код с двумя циклами for:
for i in l:
for j in d.values():
if i in j:
print(i, ':', j[i])
Комментарии:
1. Любые возможности с одним циклом for?
2. Вы можете использовать itertools, я добавил пример кода с itertools в свой комментарий
3. Спасибо. Возможно ли включить «val1» и «val2» в вывод соответственно?
4. Я имею в виду, нам не хватает для печати ключей ‘val1’ и ‘val2’.
5. Конечно, я обновил свой код, чтобы печатать ключи словаря d также