Python 将选定项从一个嵌套字典追加到另一个嵌套字典

Python 将选定项从一个嵌套字典追加到另一个嵌套字典,python,pandas,dictionary,nested,append,Python,Pandas,Dictionary,Nested,Append,我希望将列表项从一个嵌套字典追加到另一个嵌套字典,从SystemDicto3追加到SystemDictu4。它们都有相同类型的内容,系统编号键以及哪些电子邮件值属于该系统编号。到目前为止,我有以下完整代码的代码片段: #Gets the key/system with the lowest amount of values/emails, set = to SysMin SysLength = defaultdict(list) for x in SystemDict: length =

我希望将列表项从一个嵌套字典追加到另一个嵌套字典,从SystemDicto3追加到SystemDictu4。它们都有相同类型的内容,系统编号键以及哪些电子邮件值属于该系统编号。到目前为止,我有以下完整代码的代码片段:

#Gets the key/system with the lowest amount of values/emails, set = to SysMin
SysLength = defaultdict(list)
for x in SystemDict:
    length = len(SystemDict[x])
    SysLength[x].append(length) 
SysMin = min(SysLength, key=SysLength.get)

for system in SystemDicto3: #Iterates through systems
    for item in SystemDicto3[system]: #iterates through emails within systems
        if item in system != SystemDictu4[system]: #if the email isn't in the dict, add it
            SystemDictu4.append(item)
我想重复一下SystemDicto3字典电子邮件,dfo3数据框用于创建此字典,根据它所在的系统将内容添加到alreay填充的SystemDictu4字典中,并以最低计数对系统进行优先级排序

例如,如果电子邮件test1@test.com在SystemDicto3中:

 ['System 1']
 ['System 3']
 ['System 5'] 
 ['System 7'] 
我想把那封邮件附加到三个最低的SystemDictu4系统。因此,如果SystemDictu4中的长度如下所示:

system 1 = 100 
system 3 = 40 
system 5 = 200 
system 7 = 90
我想将该电子邮件附加到系统1、3和7

我没有包括我的完整代码,因为它可能会使问题复杂化。任何帮助都将不胜感激,感谢您抽出时间阅读此文

字典看起来像下面的代码。最多可以有60个系统,每个系统中有1000封电子邮件,同一封电子邮件可以在不同的系统中显示,我的目标是将第二个字典中的电子邮件添加到第一个字典中。预期的输出将是一个一次填充的字典,以及一个包含未发送到第一个字典的电子邮件的字典

    {'System 1':                         test1@test.com
                                       test2@test.com
                                       test5@test.com

'System 2':                                test1@test.com
                                           test7@test.com
                                           test55@test.com

 'System 3':                              test1@test.com
                                          test23@test.com
                                          test55@test.com

'System 4':                                test1@test.com
                                           test23@test.com
                                           test55@test.com   }

首先,让我们将列表字典转换为集合字典

SystemDictu4 = {'System 1': ['test1@test.com', 'test2@test.com', 'test5@test.com'],
                'System 2': ['test1@test.com', 'test7@test.com', 'test55@test.com'],
                'System 3': ['test1@test.com', 'test23@test.com', 'test55@test.com'],
                'System 4': ['test1@test.com', 'test23@test.com', 'test55@test.com']}
System = {k,set(v) for k,v in SystemDictu4.items()}
我建议使用set,因为每个系统密钥只需要每个电子邮件地址的一个实例。一旦我们将更大的系统转换为集合词典,那么我们就可以利用集合的性质来统一来自其他系统的信息

def add_dict(SystemDictFrom, SystemDictTo, number_of_systems):
    for system in sorted(SystemDictFrom, key = lambda a: len(SystemDictFrom.get(a)))[:number_of_systems]:
        if system in SystemDictTo:
            SystemDictTo[system].union(SystemDictFrom[system])
        else:
            SystemDictTo[system] = SystemDictFrom[system]
在上面的函数中,我使用SystemDictFrom作为列表或集合的字典,它将向更大的字典SystemDictTo添加值

您可以使用以下命令调用该函数:

# This will add the three least populated systems from SystemDicto3 to SystemDictu4
add_dict(SystemDicto3, SystemDictu4, 3)

如果你给我一个输入词典和预期输出的例子,我会在我的答案中添加一些代码。我添加了更多的内容,如果你有任何具体的问题,请告诉我。以下是你给出的词典的准确表示:{'System 1':['test1@test.com', 'test2@test.com', 'test5@test.com“],“系统2”:['test1@test.com', 'test7@test.com', 'test55@test.com“],“系统3”:[”test1@test.com', 'test23@test.com', 'test55@test.com“],“系统4”:[”test1@test.com', 'test23@test.com', 'test55@test.com']}是的,确切地说,这两个词典有不同的电子邮件集。因此我希望将较小的第二个词典的内容添加到第一个词典中,请记住,添加的电子邮件必须传输到正确的系统,并且必须对3个系统进行优先级排序,其中SysMin变量最少谢谢,我对w有更好的了解你现在需要的帽子,给我一分钟。