У меня есть этот пустой dictionary of dictionary
в python
, и я пытаюсь добавить / добавить элементы к нему. У отдельного внутреннего словаря в качестве значения ключа есть список.
Пустая структура моего dict of dict:
grp_task_text_dict = {'Group 1': {}, 'Group 2': {}}
Вот мой текущий код, который читает элементы и, основываясь на определенных условиях, должен добавить этот элемент к Group 1
или Group 2
:
def text_mapping_bot2():
group_list = ['Group 1','Group 2']
task_text_dict = {}
grp_task_text_dict = {i: task_text_dict for i in group_list}
grp_mapping = {i: [] for i in group_list}
print('EMPTY GROUP TASK TEXT DICT = {}'.format(grp_task_text_dict))
bot_mapping = [{'Name': '', 'Task ID': '0','Task Text': 'Try again!', 'Group': '', 'Complementary Action': ''}, {'Name': 'Hello', 'Task ID': '1.0','Task Text': 'Hi, Welcome', 'Group': 'Group 2', 'Complementary Action': 'group'}, {'Name': 'Hello', 'Task ID': '11.0', 'Task Text': 'Tell me about car options? ', 'Group': 'Group 2', 'Complementary Action': ''}, {'Bot Name': 'Hello', 'Task ID': '11.0', 'Task Text': 'What are different car options?', 'Group': 'Group 2', 'Complementary Action': ''}, {'Name': 'Hello', 'Task ID': '11.0','Task Text': 'What cars are there?', 'Group': 'Group 2','Complementary Action': ''}, {'Name': 'Hello', 'Task ID': '11.0','Task Text': 'May I know about Car types?', 'Group': 'Group 2','Complementary Action': ''}, {'Name': 'Hello', 'Task ID': '2.0', 'Task Text': 'How much is the rent of compact car? ', 'Group': 'Group 2','Complementary Action': ''}, {'Name': 'Hello', 'Task ID': '2.0','Task Text': 'Compact car expenses?', 'Group': 'Group 2', 'Complementary Action': ''}, {'Name': 'Hello', 'Task ID': '2.0', 'Task Text': 'Cost of compact car?', 'Group': 'Group 2', 'Complementary Action': ''}, {'Name': 'Hello', 'Task ID': '2.0','Task Text': 'How much do I need to pay for small car', 'Group': 'Group 2', 'Complementary Action': ''}]
for item in bot_mapping:
print("ITEM IN BOT MAPPING = {}".format(item))
print('\n')
print('\n')
for grp, val in grp_task_text_dict.items():
print('CURRENT VAL = {} and GROUP = {}'.format(val, grp))
try:
if last_id < int(float(item['Task ID'])):
last_id = int(float(item['Task ID']))
except:
pass
try:
if item['Task ID'] == '':
item['Task ID'] = '0'
if (item['Task ID'] in val) and (str(item['Group']).lower() == str(grp).lower()):
print('\n')
print('CURRENT STATUS OF GROUP TASK TEXT DICT BEFORE APPENDING= {}'.format(
grp_task_text_dict))
print('\n')
print('GROUP AND TASK ID ALREADY IN ITEM AND TASK TEXT DICT IS SAME - {} and {}'.format(
str(item['Group']).lower(), str(grp).lower()))
print('\n')
print('APPENDING TO THIS GROUP IN GRP TASK DICT = {}'.format(grp_task_text_dict[grp][item['Task ID']]))
# val[item['Task ID']].append(item['Task Text'])
grp_task_text_dict[grp][item['Task ID']].append(item['Task Text'])
print('CURRENT STATUS OF GROUP TASK TEXT DICT AFTER APPENDING= {}. Going to Break out of loop'.format(
grp_task_text_dict))
break
elif str(item['Group']).lower() == str(grp).lower():
print('CURRENT STATUS OF GROUP TASK TEXT DICT BEFORE APPENDING IN NEW TASK ID= {}'.format(
grp_task_text_dict))
print('\n')
print('NEW TASK ID BUT GROUP SAME = {} and {}'.format(str(item['Group']).lower(), str(grp).lower()))
print('\n')
print('APPENDING TO THIS GROUP IN GRP TASK DICT IN NEW ID = {}'.format(grp_task_text_dict[grp]))
print('\n')
# val[item['Task ID']] = [item['Task Text']]
grp_task_text_dict[grp][item['Task ID']] = [item['Task Text']]
print(
'CURRENT STATUS OF GROUP TASK TEXT DICT AFTER APPENDING IN NEW TASK ID = {}. Going to Break out of loop'.format(
grp_task_text_dict))
break
except Exception as e:
print("THIS EXCEPTION CAME = {}".format(e))
# print('--iteration check--', task_text_dict)
Я хочу, чтобы на основе Group
, поданных в каждом item
в bot_mapping
, код должен либо добавить его в список, связанный с Task ID
этого группового словаря в grp_task_text_dict, если Task ID
уже существует в этом групповом словаре, или создайте новый список с новым Task ID
в соответствующем групповом словаре в grp_task_text_dict
. Так, например, если Group
в элементе - Group 2
, а Task ID
- 11.0
, то этот элемент должен быть добавлен в список Task ID
11.0
в Group 2
словаре grp_task_text_dict
, а не в Group 1
.
Когда я выполняю этот код, он добавляет элемент в словари Group 1
и Group 2
, даже если мой код добавляется к определенной группе, используя grp_task_text_dict[grp][item['Task ID']].append(item['Task Text'])
после сопоставления имени Group
, используя if (item['Task ID'] in val) and (str(item['Group']).lower() == str(grp).lower()):
.
Пример вывода моего кода выглядит следующим образом:
ITEM IN BOT MAPPING = {'Bot Name': 'Hello', 'Task ID': '11.0', 'Task Text': 'What are different car options?', 'Group': 'Group 2', 'Complementary Action': ''}
CURRENT VAL = {'1.0': ['Hi, Welcome'], '11.0': ['Tell me about car options? ']} and GROUP = Group 1
CURRENT VAL = {'1.0': ['Hi, Welcome'], '11.0': ['Tell me about car options? ']} and GROUP = Group 2
CURRENT STATUS OF GROUP TASK TEXT DICT BEFORE APPENDING= {'Group 1': {'1.0': ['Hi, Welcome'], '11.0': ['Tell me about car options? ']}, 'Group 2': {'1.0': ['Hi, Welcome'], '11.0': ['Tell me about car options? ']}}
GROUP AND TASK ID ALREADY IN ITEM AND TASK TEXT DICT IS SAME - group 2 and group 2
APPENDING TO THIS GROUP IN GRP TASK DICT = ['Tell me about car options? ']
CURRENT STATUS OF GROUP TASK TEXT DICT AFTER APPENDING= {'Group 1': {'1.0': ['Hi, Welcome'], '11.0': ['Tell me about car options? ', 'What are different car options?']}, 'Group 2': {'1.0': ['Hi, Welcome'], '11.0': ['Tell me about car options? ', 'What are different car options?']}}
Как вы можете видеть выше, он добавляется к Group 1
и Group 2
, когда он должен добавляться только к Group 2
.
Я знаю, что в моей логике есть какая-то ошибка, но я не могу понять, в чем и в чем заключается проблема, которая вызывает неправильный вывод. Любая помощь?