列表/Dict数据操作删除重复项

2024-10-01 15:32:32 发布

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

在做了一些网页抓取并结合了结果之后,我得到了一个字典列表。其中一个键(标题)是列表列表。在

 thelist = [{"name":"a name", "titles":[["foo","bar", ... ],["foo","baz",["..."], ... ]]},
{"name":"another name", "titles":[["foo","bar", ... ],["foo","baz",["..."], ... ]]}, ... ]

其目标是消除出现在每个字典中标题列表中多个列表中的标题,并将标题列表替换为单个标题列表(不重复)。在

我现在编写的代码可以正确地访问列表列表中的所有项,但实际上我很难消除重复项。在

^{pr2}$

似乎匹配永远不等于标题中的值。我已经尝试过改变循环的嵌套,但是到目前为止没有效果。我在某个地方迷路了,我不知道还能做什么。任何建议都将不胜感激。在


Tags: 代码name网页标题目标列表字典foo
2条回答

dict是可变的,因此您只需更新原始列表中的每个dict,使用itertools.chain来展开列表列表:

l = [{'name': 'a name', 'titles': [['foo','bar'],['foo','baz']]}]

from itertools import chain
for d in l:
    d["titles"] = list(set(chain.from_iterable(d["titles"])))

print(l)

输出:

^{pr2}$

如果要保持每个子元素的显示顺序,可以使用OrderedDict删除重复项:

from itertools import chain
from collections import OrderedDict

for d in l:
    d["titles"] = list(OrderedDict.fromkeys(chain.from_iterable(d["titles"])))

print(l)

输出:

^{4}$

获取没有重复项的列表的惯用方法是list(set(some_iterable))

加上一个列表理解,我们得到

thelist = [{'name': 'a name', 'titles': [['foo','bar'],['foo','baz']]}]

print [
    {
        'name': d['name'],
        'titles': list(set(title for lst in d['titles'] for title in lst)) 
    }
    for d in thelist 
]

印刷品

^{pr2}$

相关问题 更多 >

    热门问题