我有一個字符串鍵和浮點值的字典。在Python中過濾字典的最佳方法
mydict = {}
mydict["joe"] = 20
mydict["bill"] = 20.232
mydict["tom"] = 0.0
我想篩選字典以僅包含具有大於零值的對。
在C#中,我會做這樣的事情:
dict = dict.Where(r=>r.Value > 0);
什麼是Python中的等同的代碼?
我有一個字符串鍵和浮點值的字典。在Python中過濾字典的最佳方法
mydict = {}
mydict["joe"] = 20
mydict["bill"] = 20.232
mydict["tom"] = 0.0
我想篩選字典以僅包含具有大於零值的對。
在C#中,我會做這樣的事情:
dict = dict.Where(r=>r.Value > 0);
什麼是Python中的等同的代碼?
d = dict((k, v) for k, v in d.iteritems() if v > 0)
在Python 2.7及以上,有更好的語法如下:
d = {k: v for k, v in d.items() if v > 0}
注意,因爲它創建一個新的字典,這不是嚴格意義上的過濾器。
假設你原來的字典是d1
你可以使用類似:
d2 = dict((k, v) for k, v in d1.items() if v > 0)
順便說一句,注意dict
在蟒蛇已被保留。
的dict
構造可以採取(key,value)
對的序列,並且一個字典的iteritems
方法產生的(key,value)
雙的序列。這是兩個偉大的口味,味道很棒。
newDict = dict([item for item in oldDict.iteritems() if item[1] > 0])
嘗試
y = filter(lambda x:dict[x] > 0.0,dict.keys())
拉姆達從字典喂鍵和值的字典爲每個鍵進行比較,根據標準,返回回可接受密鑰。
foo = {}
foo["joe"] = 20
foo["bill"] = 20.232
foo["tom"] = 0.0
bar = dict((k,v) for k,v in foo.items() if v>0)
dict
是在Python一個關鍵字,所以我以foo取而代之。
首先,您不應該使用關鍵字dict
作爲變量名稱,因爲它會污染名稱空間,並阻止您引用當前或嵌入作用域中的dict
類。
d = {}
d["joe"] = 20
d["bill"] = 20.232
d["tom"] = 0.0
# create an intermediate generator that is fed into dict constructor
# via a list comprehension
# this is more efficient that the pure "[...]" variant
d2 = dict(((k, v) for (k, v) in d.iteritems() if v > 0))
print d2
# {'bill': 20.232, 'joe': 20}
或者,您可以直接創建生成器和迭代器。這更像是一個「過濾器」,因爲生成器只引用原始字典中的值而不是生成子集副本;因此比創建新字典更高效:
filtered = ((k, v) for (k, v) in d.iteritems() if v > 0)
print filtered
# <generator object <genexpr> at 0x034A18F0>
for k, v in filtered:
print k, v
# bill 20.232
# joe 20
問題正在尋找返回字典,這隻返回字典的鍵。它比@ kindall的答案 –
可能是這樣的效率/ pythonic效率更低:'d = dict(filter(lambda x:x [1]> 0.0,d.items()))'' – Jeffery