2016-06-17 120 views
-1

我有這種類型的如何從字典中刪除Python中不是數字的值?

d={"Key":[name,value1,value2]} 

我只需要在我的價值的列表編號的字典。 如何刪除名稱?

Thak you!

+1

你究竟應該如何展示你」重新嘗試使用'isdigit' – Sayse

+0

你能否更準確地解釋你想要做什麼?目前還不清楚。 –

+0

@SebastianHoffmann我想刪除我的字典中不是數字的元素 – Alice

回答

4
import numbers 

for key, values in d.iteritems(): 
    d[key] = [x for x in values if isinstance(x, numbers.Number)] 

numbers包自2.6起可用。否則,你需要手動檢查任何數值類型(整數,浮點,長期的,複雜的)

iteritems()已被刪除,現在相同items()在3.X

2

如果name總是在列表的開頭,那麼只需d['Key'][1:]即可。否則,你可以使用以下命令:

[i for i in d['Key'] if i.isdigit()] 

當然,我假設所有d['Key']項目是字符串。否則,您不能使用isdigit()

-2
In [1]: d = {'k1': [1,2,3,'a','b','c'], 'k2': ['e',4.3,'f',5.2]} 
In [2]: for k,v in d.iteritems(): 
    ...:  #This will keep only integers, but will fail on the floats since isdigit() return False on non-integers 
    ...:  d[k] = filter(lambda e: str(e).isdigit(), v) 

    ...:  #On the other hand, This will be a generic solution for any numeric type 
    ...:  d[k] = filter(lambda e: isinstance(e, numbers.Number), v) 
    ...: 
In [3]: d 
Out[3]: {'k1': [1, 2, 3], 'k2': [4.3, 5.2]} 
+0

它只適用於int數字,還有一種方法可以包含float嗎? – Alice

+0

你從來沒有說過應該。 任何方式,你可以使用數字包,並檢查是否'lambda e:isinstance(e,numbers.Number)' – Aviad

+1

儘管此代碼可能回答問題,提供 其他上下文關於_why_和/或_how_它回答 問題會顯着提高其長期價值。請[編輯]你的答案,添加一些解釋。 –

相關問題