我有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的新手,所以如果你能为我的问题提出更好的解决方案,我会非常高兴。谢谢
答案 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}