【问题标题】:Updating Multi-level Nested Dictionary with a Multi-level Nested Dictionary使用多级嵌套字典更新多级嵌套字典
【发布时间】:2022-01-25 04:21:20
【问题描述】:
# Trying to Update a multi-dimensional dictionary using a multi-dimensional dictionary
# Iterate through existing dictionary with entries to create new multi-dimensional structured dictionaries
for entry_index, entry_data in entries.items():
        #print(f"Entry[{entry_index}]: {entry_data}")
        client_id = int(entry_data['CLIENT_ID'])
        matter_id = int(entry_data['MATTER_ID'])
        ref_num = entry_data['REF_NUM']
        tk_id = entry_data['TK_ID']
        date = entry_data['DATE'].strftime('%m-%d-%y')

        update_hierarchy = {
            client_id:{
                matter_id:{
                    ref_num:{
                        tk_id:{
                            date:{
                                entry_index:{
                                    'PHASE_TASK': entry_data['PHASE_TASK'],
                                    'ACTIVITY': entry_data['ACTIVITY'],
                                    'RATE': entry_data['RATE'],
                                    'HOURS': float(entry_data['HOURS']),
                                    'AMOUNT': entry_data['AMOUNT'],
                                    'DESCRIPTION': entry_data['DESCRIPTION'],
                                    'HOLD': entry_data['HOLD']
                                }
                            }
                        }
                    }
                }
            }
        }
        entries_hierarchy.update(update_hierarchy)
        # Expected behavior: Each nested key will be updated given nested dict structure...ie.
        # Expected Output:
        '''
        800:
            50:
                24:
                    12:
                        12.21.21:
                            0:
                                'Phase Task': Value,
                                'Activity': Value,
                                'Rate': Value,
                                'Hours': Value,
                                'Amount': Value,
                                'Description': Value,
                                'Hold': Value
                            1:
                                'Phase Task': Value,
                                'Activity': Value,
                                'Rate': Value,
                                'Hours': Value,
                                'Amount': Value,
                                'Description': Value,
                                'Hold': Value
            51:
                24:
                    12:
                        12.21.21:
                            2:
                                'Phase Task': Value,
                                'Activity': Value,
                                'Rate': Value,
                                'Hours': Value,
                                'Amount': Value,
                                'Description': Value,
                                'Hold': Value
                            3:
                                'Phase Task': Value,
                                'Activity': Value,
                                'Rate': Value,
                                'Hours': Value,
                                'Amount': Value,
                                'Description': Value,
                                'Hold': Value
        '''
        # Actual Result
        '''
        800:
            50:
                24:
                    12:
                        12.21.21:
                            0:
                                'Phase Task': Value,
                                'Activity': Value,
                                'Rate': Value,
                                'Hours': Value,
                                'Amount': Value,
                                'Description': Value,
                                'Hold': Value
                            1:
                                'Phase Task': Value,
                                'Activity': Value,
                                'Rate': Value,
                                'Hours': Value,
                                'Amount': Value,
                                'Description': Value,
                                'Hold': Value
        '''

        update_clients = {
            client_id: {
                entry_index: {
                    'MATTER_ID': matter_id,
                    'REF_NUM': ref_num,
                    'TK_ID': tk_id,
                    'DATE': date,
                    'PHASE_TASK': entry_data['PHASE_TASK'],
                    'ACTIVITY': entry_data['ACTIVITY'],
                    'RATE': entry_data['RATE'],
                    'HOURS': float(entry_data['HOURS']),
                    'AMOUNT': entry_data['AMOUNT'],
                    'DESCRIPTION': entry_data['DESCRIPTION'],
                    'HOLD': entry_data['HOLD']
                }
            }
        }
        entries_clients.update(update_clients)

entries_clients.update(update_clients) 最终每个客户端 ID 仅包含 1 个条目,并且预期行为是 update()client_id 键下插入一个新的 entry_id 键(如果它不存在)

似乎Update() 只会更新字典中的第一个键并忽略嵌套键...我来自 PHP,发现在 Python 中使用数组并不那么直观。

我发现的其他问题只涉及单个嵌套字典,而不是多级字典。

【问题讨论】:

标签: python dictionary nested


【解决方案1】:

您似乎更新了错误的字典。

在最后一行尝试将其更改为:

entries_clients.update(update_clients)

entries_clients[client_id].update(update_clients)

【讨论】:

  • 我不是要更新错误的字典,而是要更新整个字典。我正在尝试更新这些嵌套的字典,例如,entry_clients 示例,如果 client_id 已经存在,而 entry_iindex 不存在,它会将 entry_index 键:值对添加到相应的 client_id 键中。但在这两种情况下,它只是更新第一个键而不是整个字典。
猜你喜欢
  • 1970-01-01
  • 2022-08-15
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多