如何从嵌套字典中比较和提取相等值,并将相等值附加到列表中

2024-04-18 05:02:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下函数负责生成一个嵌套字典,其中包含在for循环中工作的整数键,并且我希望在找到相等值时创建一个更新的列表:

# The number of times I want to run
n = 2
# Number of Loops
count = 0
# Init the Hash Table
castar_hash = {}

def run_discrete_time(start, path, count):
    '''
    Create or Update the Nested Dic, look for equal values and append
    a new list based on the 'path' input

    Args:

       start (list)
       path  (list)
       count (int)

    Vars:

        start = A simple list with one element
        path  = A list of Tuples
        count = The atual Loop Interaction
    '''
    # Inserted the 0 because the "discrete time" will init at 0
    path_list.insert(0, start)

    time_run = list(range(0, len(path_list)+1))
    hash = {t:p for t,p in zip(time_run,path_list)}

    #* Create a new Dic Key
    value_list = ['value', str(count)]
    value = "".join(value_list)
    castar_hash.update({value:hash})

    print(f'\nThe time steps is: {time_run}')
    print(f'The Hash table is: {castar_hash}\n')
    '''
    Need the code here to find the equal values
    in the castar_hash and append to a updated list
    '''
    return updated_list

def main():
    for _ in range(n):
        '''
        some code here who picks the start and path from a deque
        already implemented (see the inputs bellow)
        '''
        count += 1
        run_discrete_time(start, path, count)

if __name__ == '__main__':
    main()

让我解释函数如何与输入一起工作:考虑到循环将运行2次(因为次数“n”为2),对于第一次调用,考虑到输入:

run_discrete_time([4, 6], [(4, 5), (4, 4),(4, 3),(5, 3),(6, 3),
                  (7, 3), (8, 3), (8, 2), (8, 1),(9, 1)],
                  count)

生成的嵌套dic将是:

castar_hash = {'value1': {0:(4, 6), 1:(4, 5), 2:(4, 4), 3:(4, 3), 
                          4:(5, 3), 5:(6, 3), 6:(7, 3), 7:(8, 3),
                          8:(8, 2), 9:(8, 1), 10:(9, 1)},

对于具有输入的第二个回路:

run_discrete_time([1, 6], [(2, 6), (4, 4), (4, 6),(4, 5), (4, 4),
                  (4, 3), (5, 3), (6, 3), (8, 1), (8, 3), (9, 3)],
                  count)

更新的嵌套dic现在将是:

castar_hash = {'value1': {0:(4, 6), 1:(4, 5), 2:(4, 4), 3:(4, 3), 
                          4:(5, 3), 5:(6, 3), 6:(7, 3), 7:(8, 3),
                          8:(8, 2), 9:(8, 1), 10:(9, 1)}, 
               'value2': {0:(1, 6), 1:(2, 6), 2:(4, 4), 3:(4, 6), 
                          4:(4, 5), 5:(4, 4), 6:(4, 3), 7:(5, 3),
                          8:(6, 3), 9:(8, 1), 10:(8, 3), 11:(9,3)}}

我的问题是:为每个循环提取嵌套DIC中相等值的最佳和最有效的方法是什么(考虑到我可以有两个以上)?我一直在努力寻找解决办法

例如,“value2”dic中的重复值是2:(4,4)9:(8,1)(与“value1”dic相关),我想返回一个更新为(4,4)插入索引2中的新列表,以及(8,1)插入索引9的新列表,例如:

#The Path List of Tuples inputed at the second loop
path = [(2, 6), (4, 4), (4, 6),(4, 5), (4, 4),
        (4, 3), (5, 3), (6, 3), (8, 1), (8, 3), (9, 3)]
#The New Updated Path List that I want to return since
#the method finded equals values compared to the 'value1' dic:
new_path = [(2, 6), (4, 4), (4, 4) (4, 6),(4, 5), (4, 4),
            (4, 3), (5, 3), (6, 3), (8, 1), (8, 1), (8, 3),
            (9, 3)]