我有一個像的Python解釋:從元組移除一個字符串
dic ={('L', 'N', 'C'):6, ('N', 'L', 'C'):4, ('C', 'N', 'L'):3})
我想從所有鍵刪除字符串「C」字典(這是關鍵)。 有這樣
我有一個像的Python解釋:從元組移除一個字符串
dic ={('L', 'N', 'C'):6, ('N', 'L', 'C'):4, ('C', 'N', 'L'):3})
我想從所有鍵刪除字符串「C」字典(這是關鍵)。 有這樣
的任何有效的方式這可以用一個dictionary comprehension來完成:
>>> dic ={('L', 'N', 'C'):6, ('N', 'L', 'C'):4, ('C', 'N', 'L'):3}
>>> {tuple(l for l in k if l != 'C'):v for k,v in dic.items()}
{('L', 'N'): 6, ('N', 'L'): 4}
注意去除'C'
使得('N', 'L', 'C')
和('C', 'N', 'L')
衝突,因爲它們都成爲('N', 'L')
。這個問題並不清楚你希望如何處理這個問題。
.. 。你的答案中的代碼通過只保留最後一個值的方式「處理」它。 – martineau
這段代碼創建一個新的字典(也就是說用一個新的id)。即使對於不包含'C'的鍵,也執行'元組'(如果l!='C'則執行l'),即使它們具有相同的值,也會使用新的ID創建新鍵。如果字典很大,所有這些都代表無用的工作。 - 順便說一下,如果古代字典沒有被破壞,它仍然存在。 – eyquem
這似乎給了元組,但元組的順序與原始元組都是不同的。你能解釋一下爲什麼請問? – user1828603
for k,v in dic.iteritems():
if 'C' in k:
dic[tuple(el for el in k if el!='C')] = dic.pop(k)
在該溶液中,
只包含消除元件的鍵被改變(因爲元組新對象是不可變)。
字典被修改爲
並且值保持相同的對象。
以下代碼顯示。
dico = {(1,2,8):'aa',
(25,8,45,9):'gerard',
(268,54,0):'marine',
(81,3,8,7):'emma',
(7,9,6):'louis'}
print ' id(dico) : ',id(dico)
for k,v in dico.iteritems():
print id(k),'%-25s' % repr(k),id(v),v
idk = [id(el) for el in dico]
for k,v in dico.iteritems():
if 8 in k:
dico[tuple(el for el in k if el!=8)] = dico.pop(k)
print
print ' id(dico) : ',id(dico)
for k,v in dico.iteritems():
print '%d %-30s %d %s' %\
(id(k), ('[new id] ' if id(k) not in idk else ' ')+repr(k),id(v),v)
結果
id(dico) : 18737456
18751976 (268, 54, 0) 18718464 marine
11258576 (1, 2, 8) 18566968 aa
18539072 (25, 8, 45, 9) 18603776 gerard
18606768 (81, 3, 8, 7) 18718432 emma
18752056 (7, 9, 6) 18718592 louis
id(dico) : 18737456
18752216 [new id] (1, 2) 18566968 aa
18751976 (268, 54, 0) 18718464 marine
18752176 [new id] (81, 3, 7) 18718432 emma
18752056 (7, 9, 6) 18718592 louis
18752416 [new id] (25, 45, 9) 18603776 gerard
Questioàn奇怪的類似http://stackoverflow.com/questions/13571438/remove-a-value-from-a-dictionary-with-multiple-values – eyquem