正在从列表词典中删除项

2024-04-26 04:10:45 发布

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

在Python3中有没有更好的方法:

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

我希望从词典中的任何一条边开始,同时也把它从词典中去掉。当列表变空时,我还需要删除它。你知道吗


Tags: 方法列表lenifpython3词典pointedge
3条回答

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

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

如果我正确理解了你的问题,并且无耻地处理了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]

是的,也不是。主要问题是这条线:

point, edges = edges_per_point.popitem()

这将从字典中删除一项并返回它。但是哪一项呢?嗯,你不知道。这完全是武断的。你真的这么想吗?你知道吗

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

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

pop(0)将从edges列表中删除第一项,并将其放入edge变量中。你知道吗

所以上面的两行是一个更好的方法来完成你的要求的答案,虽然它不能完全取代你的四行代码,因为这四行没有意义。你知道吗

相关问题 更多 >