删除字典中每个值的重复项

2024-10-05 10:40:48 发布

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

我有一本字典,上面有这样的列表:

{'S26': [['2016-03-18', '2016-03-28'], ['2016-03-18', '2016-03-28']], 'S24': [['2016-03-19', '2016-03-25'], ['2016-03-25', '2016-04-03']], 'S25': [['2016-03-18', '2016-03-25'], ['2016-03-18', '2016-03-25'], ['2016-03-20', '2016-03-25'], ['2016-03-20', '2016-03-25'], ['2016-03-25', '2016-04-03']]}

我想检查每个列表并删除任何重复的子列表。因此,例如,键S26在列表中具有两个重复项:

'S26': [['2016-03-18', '2016-03-28'], ['2016-03-18', '2016-03-28']]

该键现在应该是:

'S26': [['2016-03-18', '2016-03-28']]

这可能吗?这个系统上的python版本是2.6.6


Tags: 版本列表字典系统s25s24s26
3条回答
for val in dict:
    tmp=[]
    for l in dict[val]:
        if l not in tmp: tmp.append(l)
    dict[val]=tmp

您可以使用以下选项:

d = {'S26': [['2016-03-18', '2016-03-28'], ['2016-03-18', '2016-03-28']], 'S24': [['2016-03-19', '2016-03-25'], ['2016-03-25', '2016-04-03']], 'S25': [['2016-03-18', '2016-03-25'], ['2016-03-18', '2016-03-25'], ['2016-03-20', '2016-03-25'], ['2016-03-20', '2016-03-25'], ['2016-03-25', '2016-04-03']]}

answer = {k:[list(el) for el in set([tuple(sublist) for sublist in v])]
             for k, v in d.items()}
print(answer)

输出

{'S24': [['2016-03-19', '2016-03-25'], 
         ['2016-03-25', '2016-04-03']],
 'S25': [['2016-03-20', '2016-03-25'],
         ['2016-03-18', '2016-03-25'],
         ['2016-03-25', '2016-04-03']],
 'S26': [['2016-03-18', '2016-03-28']]}

这将迭代字典中的每个(k, v)元素对,并从列表值中删除重复的子列表。为此,我们使用列表理解将每个sublist转换为tuple,这样我们就可以创建一个set(因为列表是不可散列的)。你知道吗

这一个也适用:

>>> from collections import defaultdict
>>>
>>> d = {'S26': [['2016-03-18', '2016-03-28'], ['2016-03-18', '2016-03-28']], 'S24': [['2016-03-19', '2016-03-25'], ['2016-03-25', '2016-04-03']], 'S25': [['2016-03-18', '2016-03-25'], ['2016-03-18', '2016-03-25'], ['2016-03-20', '2016-03-25'], ['2016-03-20', '2016-03-25'], ['2016-03-25', '2016-04-03']]}
>>> 
>>> out_d = defaultdict(list)
>>> for k,v in d.items():
        for vv in v:
            if vv not in out_d[k]:
                out_d[k].append(vv)

>>> out_d
defaultdict(<class 'list'>, {'S24': [['2016-03-19', '2016-03-25'], ['2016-03-25', '2016-04-03']], 'S26': [['2016-03-18', '2016-03-28']], 'S25': [['2016-03-18', '2016-03-25'], ['2016-03-20', '2016-03-25'], ['2016-03-25', '2016-04-03']]})

相关问题 更多 >

    热门问题