@fantom_ask

Как перебрать словарь если доступных indexs меньше чем нужно?

Я решил попробовать создать функцию перебора цветов
Количество элементов внутри словаря может быть разным как и число в num

Если количество элиментов больше числа num то остаток не учитывается
1:red, 2:blue, 3:green # Остальное удаляется :yellow , :brown

Если количество элиментов меньше числа num то

Либо значения перебираются по второму кругу
1:red, 2:blue, 3:green, 4:red, 5:blue,

Либо устанавливается последнее доступное число
1:red, 2:blue, 3:green, 4:green, 5:green,
1:red, 2:blue, 3:green, 4:blue, 5:green,


Значение step влияет на поочередность вывода
где учитывается только каждый второй элемент списка каждый третий и так далее

Мой код
from collections import defaultdict

arr = {
	'A_text':['Blue','Green'],
	'background':['Putpure','Brown','White',"Lemon"],
	'border':['Yellow','Sky'],
	'shadow':['Pink','Black'],
}
#arr = {'A_text':['Blue','Green']}
step = [2,1]
type = [1]

def fun(
		id,
		child=None,
		type=3, 
		num=1 
	):
	end = 0 if type == 1 else len(child)-1 if  type == 2 else id
	#print('{}+{}'.format(id+num,len(child)-1))
	if id+num <= len(child)-1 :
		#print("BAD")
		fin = id+num 
	else :
		fin = end
	#print('fin {}'.format(fin))
	return fin
	#return id+num if id+num <= len(child)-1 else end

num = 3
id = defaultdict(int)
for x in range(num):
	new_arr = {}
	for key, value in sorted(arr.items()):
		#print(arr[key])
		#print(id[key])
		#print(id['step'])
		#print(id['type'])
		if key == 'A_text' :
			new_arr[key] = [
				arr[key][id[key]],
				arr[key][fun(id[key], arr[key] ,1, 1)]
			]
		else :
			new_arr[key] = arr[key][id[key]]
		id[key] = fun(
			id[key],
			value,
			type[id['type']],
			step[id['step']]
		)
		id['step'] = fun(id['step'],step)
		id['type'] = fun(id['type'],type)
	print(new_arr)


Сейчас я запутался и не совсем понимаю почему
A_text после второго значения вместо ['Blue','Green'] выводит ['Green','Blue']

Да я знаю насколько это все ужасно выглядит.

Но если кто нибудь знает как вывести значения если доступных indexs меньше чем num
То можете мне ответить
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 2
mrkaban
@mrkaban
СЗИ от НСД / СКЗИ / ViPNet / Python / Django / SEO
уж простите меня пожалуйста, что я не углублялся в код, но почему нельзя перебрать словарь обычным способом?
for key in arr.keys():
print(key)

или

for key in arr:
print(key)
Ответ написан
@fantom_ask Автор вопроса
Я вроде как смог решить проблему добавив
for x in range(num):
  new_arr = {}
  id['step'] = 0
  id['type'] = 0
  for key, value in sorted(arr.items()):
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы