当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”
有没有更好的结构来解决这样的问题?
仅关键字对我也有帮助。
这将起作用:它主要使用集合操作来执行比较。
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