使用python删除字典内的列表中的元素

时间:2016-04-05 21:27:15

标签: python json list python-3.x dictionary

我有json结构:

{
  "http://marvel.wikia.com/wiki/Virginia_Potts_(Earth-33900)": [
    "/wiki/Virginia_Potts_(Earth-616)",
    "/wiki/Earth-33900",
    "/wiki/Stark_Industries_(Earth-33900)",
    "/wiki/AAFES_Vol_1_15",
    "/wiki/Washington_State",
    "/wiki/Pepper_Potts",
    "/wiki/Tom_Grummett",
    "/wiki/William_Harms",
    "/wiki/Virginia_Potts_(Earth-616)#Abilities",
    "/wiki/Seattle"
  ],
  "http://marvel.wikia.com/wiki/Virginia_Potts_(Earth-5631)": [
    "/wiki/Pepper_Potts",
    "/wiki/Earth-5631",
    "/wiki/Iron_Man_and_Power_Pack_Vol_1_1",
    "/wiki/Marc_Sumerak"
  ],
...

我想迭代json并为每个项目验证它的一个链接(它是一个链接列表)是否包含在另一个带有完整字符列表的json中(在下面的代码中它是&#39 ; s characters)。 在这种情况下,我想从列表中删除链接。最后将字典(links_ref)保存在文件中。

for item in links_ref:
        for link in links_ref[item]:
            if link not in characters:
                links_ref[item].pop(link)
json.dump(links_ref, open('links_raf.json', 'w'))

此代码当然不起作用,我也尝试使用del link但是,即使它没有启动异常,它也没有从列表中删除链接。

希望有人可以帮助我,我是python的新手,所以如果你能为我的问题提出更好的解决方案,我会非常高兴。谢谢

2 个答案:

答案 0 :(得分:3)

在迭代列表时,您无法修改列表。您可以使用列表推导来过滤掉链接:

for item, links in links_ref.items():
    links_ref[item] = [link for link in links if link in characters]

答案 1 :(得分:0)

不可改变的方式:

filtered_links_ref = {i: [l for l in links_ref[i] if l not in characters] for i in links_ref}

或尝试使用set s:

character_set = frozenset(characters)
filtered_links_ref = {i: frozenset(links_ref[i]) - character_set for i in links_ref}