我想從列表中刪除字典,如果它已經存在,但它似乎並沒有工作。任何人都可以看到我在做什麼錯還是勸我,我應該做蟒蛇 - 從列表中刪除字典,如果存在
new_dict = {'value': 'some value', 'key': 'someKey'}
if new_dict in my_list:
my_list.remove(new_dict)
new_list是字典的一個列表,其中new_dict絕對是
我想從列表中刪除字典,如果它已經存在,但它似乎並沒有工作。任何人都可以看到我在做什麼錯還是勸我,我應該做蟒蛇 - 從列表中刪除字典,如果存在
new_dict = {'value': 'some value', 'key': 'someKey'}
if new_dict in my_list:
my_list.remove(new_dict)
new_list是字典的一個列表,其中new_dict絕對是
如果new_dict
是「肯定」的my_list
,然後my_list.remove(new_dict)
應該做的伎倆(即無需對if new_dict in my_list
,只是減緩下來)。
這個。爲了安全起見,你可以將它封裝在'try/except'中,然後處理'ValueError'。 –
在大多數情況下,它是聰明建立一個新的列表:
new_list = [ dd for dd in my_list if not dd is new_dict ]
這是典型的函數式編程風格,因爲它避免了副作用。想象一下,如果你在一個函數或方法中使用你的解決方案。在大多數情況下,您只需要修改列表用於內部目的,然後修改輸入參數是危險的。
你確定要在這裏使用'is'而不是== ==嗎? –
這不是問題的答案。這是另一種不會改變什麼的方式,如果他得到的東西不適合他。就我個人而言,我非常不同意你的觀點,即「在大多數情況下,建立一個新名單是很聰明的」。我偶爾會說它會是需要的,但幾乎總是會效率低下。 –
@Tim:這取決於。但是,作爲使用「in」的問題,你是對的,它應該是「==」。 – rocksportrocker
my_list = [1,{'value':'some value', 'key' :'somekey'}, 2, {'z':'z', 'x': 'x'}]
new_dict = {'value':'some value', 'key' :'somekey'}
#new_dict = {'z':'z', 'x': 'x'}
differ = 0
matched = 0
for element in my_list:
if type(element) is types.DictType and matched != 0:
differ = 0
# check if dictionary keys match
if element.viewkeys() == new_dict.viewkeys():
# check if dictionary values match
for key in element.keys():
if element[key] != new_dict[key]:
differ = 1
matched = 1
if differ != 1:
my_list.remove(new_dict)
print my_list
它適用於我的兩本字典。
您的問題可能來自於這樣的事實:從列表中刪除而重複的相同的列表不安全。你想要做的是一樣的東西:
copied_list = my_list[:]
if new_dict in copied_list:
my_list.remove(new_dict)
這樣,你遍歷表的副本,並從原來的刪除。
雖然這可能不是您的問題的原因。這將是有趣的,看看:
my_list
my_list
做什麼,即你怎麼知道你的字典裏沒有被移除
這對我的作品。你如何構建my_list? – Louis