在python 3中有更好的方法吗:
point, edges = edges_per_point.popitem()
edge = edges[0]
if len(edges) > 1:
edges_per_point[point] = edges[1:]
我希望从dict中的任何边缘开始,同时将其从字典中删除。我也是当它变空时要删除的列表。
答案 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)将从边列表中删除第一个项目,并将其放入边缘变量。
所以上面两行是更好的方法来回答你所要求的,尽管它并没有完全取代你的四行代码,因为这四行没有任何意义。