2012-11-22 94 views
0

如何刪除元組中的特定元素?如何刪除元組中的特定元素?

例如:

 L={('a','b','c','d'):1,('a','b','c','e'):2} 

     remove='b' 

我想要得到的結果是:

 {('a','c','d'):1,('a','c','e'):2} 
+0

你能否提供一些更好的背景說明爲什麼你有這樣的結構?笏,如果刪除一個元素後,2鍵變得相同? – Eduardo

回答

3
In [20]: L={('a','b','c','d'):1,('a','b','c','e'):2} 

In [21]: {tuple(y for y in x if y != "b"):L[x] for x in L} 
Out[21]: {('a', 'c', 'd'): 1, ('a', 'c', 'e'): 2} 

或使用filter()

In [24]: { tuple(filter(lambda y:y!="b",x)) : L[x] for x in L} 
Out[24]: {('a', 'c', 'd'): 1, ('a', 'c', 'e'): 2} 
+1

這樣做,你可以呈現一些鍵複製,然後他們會覆蓋對方。 – Eduardo

+0

列表解析優於過濾器 – inspectorG4dget

+0

@Eduardo是的,因爲這是字典的工作原理。 –

0

您可以創建一個更新版本詞典 使用字典解析表達式:

L = {('a', 'b', 'c', 'd'): 1, ('a', 'b', 'c', 'e'): 2, ('f', 'g', 'h'): 3} 

remove='b' 
L = {tuple(i for i in k if i != remove) if remove in k else k:v for (k,v) in L.items()} 

print L 

輸出:

{('a', 'c', 'e'): 2, ('a', 'c', 'd'): 1, ('f', 'g', 'h'): 3} 

正如你可以看到它,它的葉子項目,而不單單他們的元組鍵的元素。