У меня есть словарь словарей, который выглядит так:
d = {names: {IDs: {"constant": value, "some_list": []}}
Где каждое имя потенциально имеет несколько идентификаторов, и каждый идентификатор имеет постоянное значение и список переменной длины с конкретными строками в качестве ключей. Моя цель состоит в том, чтобы напечатать имена и IDS, когда список имеет заданную длину. Я знаю, как это сделать с помощью вложенных циклов:
for n in d:
for i in d[n]:
num = len(d[n][i]["some_list"])
if num > 5:
print "Warning %s %s has %i items" % (n, i, num)
У меня нет причины, по которой вышесказанное неприемлемо, оно работает и доступно для чтения.
Мне любопытно, если есть способ указать n и i в одном цикле for. Следующие ошибки по разным причинам:
for one in d.values().keys(): # fails as list has no attribute keys
for one.keys() in d.values(): # fails as functions can't be assigned to calls
Следующее сгенерирует список кортежей, которые затем могут быть повторены, но все же содержит два цикла for внутри понимания и потребует дополнительного цикла через новый список для печати:
new_list = [(n, i) for n in d for i in d[n] if len(d[n][i]["some_list"] > 5]
Разве нельзя обойтись без использования 2 для циклов? или есть трюк, который я пропускаю?