从列表字典中删除项目

时间:2012-01-29 20:24:23

标签: python python-3.x

在python 3中有更好的方法吗:

point, edges = edges_per_point.popitem()
edge = edges[0]
if len(edges) > 1:
   edges_per_point[point] = edges[1:] 

我希望从dict中的任何边缘开始,同时将其从字典中删除。我也是当它变空时要删除的列表。

3 个答案:

答案 0 :(得分:1)

不确定它是否更好,但略有不同:

point, edges = edges_per_point.popitem()
if len(edges) > 1:
   edge = edges_per_point[point].pop(0)
else:
   edge = edges[0] 

答案 1 :(得分:1)

如果我理解你的问题,并且无耻地处理Lennart Regebro的迭代删除方式之一。

我会这样做:

edge_list = []
delete_these = []
for point, edges in edges_per_point.items():
    edge_list.append(edges.pop(0))
    if edges:
        edges_per_point[point] = edges
    else:
        delete_these.append(point)

for point in delete_these:
    del edges_per_point[point]

答案 2 :(得分:1)

是的,不。主要问题是这一行:

point, edges = edges_per_point.popitem()

这将从字典中删除一个项目并将其返回。但是哪个项目?好吧,你不知道。这完全是武断的。这真的是你的意图吗?

代码只在循环中有意义,您可以在字典中为所有项执行此操作。然后最好这样做:

for point, edges in edges_per_point.items():
    edge = edges.pop(0)

pop(0)将从边列表中删除第一个项目,并将其放入边缘变量。

所以上面两行是更好的方法来回答你所要求的,尽管它并没有完全取代你的四行代码,因为这四行没有任何意义。