我有一個簡單的字典大看起來像這樣:比較字典值和彈出鍵
my_dict = {'a': [-33.27, -2.12, 5.23], 'b': [-57.11, 9.82, -26.13], ...}
所以鍵是字符串和值浮動的名單。
我想要做的是通過運行一個標準,找到並刪除一些冗餘鍵:值對減少它的大小。
在僞代碼的標準是:
每個鍵的我,發現在字典中是否存在不同的J鍵,以便:
value_of_key_i[0] > value_of_key_j[0] and
value_of_key_i[1] > value_of_key_j[1] and
abs(value_of_key_i[2]) < abs(value_of_key_j[2])
我寫的任務是這樣的:
to_remove = []
for ilcs, iloads in running_load.items():
for jlcs, jloads in running_load.items():
if iloads[0] > jloads[0] and iloads[1] > jloads[1] and abs(iloads[2]) < abs(jloads[2]):
# print(iloads, jloads)
to_remove.append(ilcs)
break
for i in to_remove:
running_load.pop(i)
它的工作,但明確地遍歷字典兩次,必要的額外的for循環的膨化感覺效率不高..
是否有更好的方法?用發電機做這件事效率會更高嗎,比方說,any()
?
PS:我的方法的另一個問題是,它不能測試平等,因爲在某些點的值將要對自己進行測試(是一個可以檢查該和continue
但是......)
您可能會從這些值上對'load.items()'進行排序以便避免查看您知道不符合條件的列表 –
好點,但實際上我需要它們以該順序。我無法對價值進行排序。但是也許我可以使用'ordereddict',讓我們說'values [0]'並且只搜索當前鍵的infront。 –
你想要什麼順序的值?不能保證它們會像字典一樣出現在字典中。 –