如何制作一个Python字典,其中键具有所有相关值

问题描述 投票:0回答:1

当key(1)有value(1)且key(2)有value(2)时(value(1),(2)都被设置了)

如果 key(2) 在 value(1) 中,我想将所有 value(2) 元素添加到 value(1) 中。

以下是一些示例。

d1 = {1: {2}, 2: {3}}
d2 = {1: {2, 3}, 2: {3}}

d3 = {1: {10, 20, 30}, 10: {11}, 20: {21}, 30: {31}}
d4 = {1: {10, 11, 20, 21, 30, 31}, 10: {11}, 20: {21}, 30: {31}}

d5 = {1: {2}, 2: {3}, 3: {4}}
d6 = {1: {2, 3, 4}, 2: {3, 4}, 3: {4}}

*我想知道怎么做

从 d1 得到 d2 d3 的 d4 d6 来自 d5*

如果 d3 -> d4 d3 的键为“1”,其值为“10”、“20”、“30” d3也有一个键“10”,其值为“11” 因此键“1”值变成“10”、“11”、“20”、“30” 因为键“1”的值为“10”,键“10”的值为“11”。 重复相同的步骤,最后键“1”得到值“10”,“11”,“20”,“21”,“30”,“31”

有没有更好的结构来解决这样的问题?

仅关键字对我也有帮助。

python algorithm dictionary structure defaultdict
1个回答
0
投票

这将起作用:它主要使用集合操作来执行比较。

def solve(d):
    keys = set(d.keys())               # create a set of dictionary keys
    for k in keys:                     # for each key in dictionary
        values = set()                 # create an empty set
        while keys & d[k] ^ values:    # while values left  
            for val in d[k] ^ values:  # for each of the values
                values.add(val)        # add it to the values set
                d[k] |= d[val]         # expand the value for dictionary key
    return d                           # return dictionary

d1 = {1: {2}, 2: {3}}
d2 = {1: {2, 3}, 2: {3}}

d3 = {1: {10, 20, 30}, 10: {11}, 20: {21}, 30: {31}}
d4 = {1: {10, 11, 20, 21, 30, 31}, 10: {11}, 20: {21}, 30: {31}}

d5 = {1: {2}, 2: {3}, 3: {4}}
d6 = {1: {2, 3, 4}, 2: {3, 4}, 3: {4}}

groups = [(d1,d2), (d3,d4), (d5,d6)]
for before, after in groups:
    assert solve(before) == after  # assert that d1 equals d2 after function
© www.soinside.com 2019 - 2024. All rights reserved.