合并字典中的列表并删除重复项

时间:2021-06-29 09:24:10

标签: python list dictionary duplicates

我只发现人们想要将列表合并到字典或合并字典但不合并字典中已有的列表的问题

假设我有一个具有以下结构的字典

myDict= {
  'key1': [{'description': 'some description', 'listwithstrings': ['somestring1'], 'number': '1'}, {'listwithstrings': ['somestring1', 'somestring2'], 'description': 'some other description', 'number': '1'}],
  'key2': [{'listwithstrings': ['somestring4'], 'description': "some different description, 'number': '2'}, {'number': '2', 'listwithstrings': ['somestring5'], 'description': 'some different description'}],
  'key3': [{'number': '3', 'listwithstrings': ['somestring7', 'somestring8'], 'description': 'only one entry'}]
  }

现在我想为自己合并字典中每个键的条目并删除重复项。我不知道每个键是否有多个条目(也可以有两个以上)或只有一个,因此我不能将键用作 number==1

之类的条件

结果

myCleanedDict= {
  'key1': [{'description': ['some description', 'some other description'], 'listwithstrings': ['somestring1', 'somestring2'], 'number': '1'}],
  'key2': [{'listwithstrings': ['somestring4', 'somestring5'], 'description': 'some different description', 'number': '2'}],
  'key3': [{'number': '3', 'listwithstrings': ['somestring7', 'somestring8'], 'description': 'only one entry'}]
  }

1 个答案:

答案 0 :(得分:0)

myDict = {
    'key1': [
        {
            'description': 'some description', 
            'listwithstrings': ['somestring1'], 
            'number': '1'
        }, 
        {
            'listwithstrings': ['somestring1', 'somestring2'], 
            'description': 'some other description', 
            'number': '1'
        }
    ],
    'key2': [
        {
            'listwithstrings': ['somestring4'], 
            'description': 'some different description', 
            'number': '2'
        }, 
        {
            'number': '2', 
            'listwithstrings': ['somestring5'], 
            'description': 'some different description'
        }
    ],
    'key3': [
        {
            'number': '3', 
            'listwithstrings': ['somestring7', 'somestring8'], 
            'description': 'only one entry'
        }
    ]
}

newDict = {}
for k, v in myDict.items():
    if len(v) == 0: continue
    target = v[0]
    for k in target:
        if not isinstance(target[k], list):
            target[k] = [target[k]]
    for i in range(1, len(v)):
        for k, v in v[i].items():
            if isinstance(v, list):
                target[k] += v
            else:
                target[k].append(v)
            target[k] = list(set(target[k]))
    for k in target:
        if len(target[k]) == 1:
            target[k] = target[k][0]
    newDict[k] = [target]

print(newDict)

相关问题