我有兩個字典,它們的順序由它們的值表示。
d1= {570.44: 2, 305.21: 1, 271.94: 0, 463.20: 3, 556.60: 4, 596.27: 5}。
d2= {570.44: 537.5, 596.27: 767.0, 556.60: 644.5, 271.94: 285.0, 305.21: 334.5, 463.20: 428.5}。
我想比較順序,這是由值定義的。
例如,570.44根據數值的不同不會相同,在d1中,它將處于第三位,而在d2中,它將處于第四位。
d1[570.44] < d2[570.44]
正如你所看到的,當我指的是順序時,我指的是由鍵值決定的順序,而不是插入的順序等。
我怎樣才能比較這兩個字典? (通常的比較是為了平等,就像在這個問題中一樣,但我對順序感興趣
uj5u.com熱心網友回復:
如果我理解正確,這可能是你想要的。簡單地按照字典的值進行排序,然后比較有序的鍵串列。
在[10]。d1_ordered = [k for k, _ in sorted(d1. items(), key=lambda x: x[1]) ]
在[11]: d2_ordered = [k for k, _ in sorted(d2。 items(), key=lambda x: x[1]) ]
在[12]: d1_ordered
出來[12]: [271.94, 305.21, 570. 44, 463.2, 556.6, 596.27]
在[13]: d2_ordered
出[13]: [271.94, 305.21, 463. 2, 570.44, 556.6, 596.27]
在[14]。for idx, d1_k in enumerate(d1_ordered)。
...: if d1_k not in d2_ordered:
...: print(f "Key {d1_k} not exists in d2")
...: continue)
...: if idx != d2_ordered.index(d1_k):
...: print(f "Key {d1_k} is in different order in these dicts"/span>)
...:
關鍵570.44 是 在不同的順序在這些dict里
關鍵463.2 是 在不同的順序在這些資料集
uj5u.com熱心網友回復:
考慮到你只想考慮普通鍵的相對順序,你可以創建兩個鍵的串列(按各自的值排序),并過濾掉另一個字典中不存在的鍵。
然后,比較這兩個串列是否相等,就可以得到你的結果。
d1= {570.44: 2, 305.21: 1, 271.94: 0, 463.20: 3, 556.60: 4, 596.27: 5}。
d2= {570.44: 537.5, 596.27: 767.0, 556.60: 644.5, 271.94: 285.0, 305.21: 334.5, 463.20: 428.5}。
k1 = list(filter(lambda k。k in d2, sorted(d1, key=d1. get)))
k2 = list(filter(lambda k: k in d1, sorted(d2, key=d2. get)))
print("Same order") if (k1 == k2) else print("不同的順序")
uj5u.com熱心網友回復:
也許這將有所幫助:-
d1 = {570.44: 2, 305.21: 1, 271.94: 0, 463.20: 3, 556.60: 4, 596.27: 5}。
d2 = {570.44: 537.5, 596.27: 767.0, 556.60: 644.5,
271.94: 285.0, 305.21: 334.5, 463.20: 428.5}。
d2_keys = list(d2.key() )
for i, k in enumerate(d1.key())。
try:
if i == d2_keys.index(k):
print(f'Key {k} is in same relative position')
else:
print(f'Key {k}不在同一相對位置')
except ValueError:
pass # key in d1 doesn't exist in d2
uj5u.com熱心網友回復:
我想知道鍵是否以相同的順序排列,如果不是,就采取一些行動;順序是由鍵的值給出的
那么,你就可以知道這些鍵是否以相同的順序排列。
那么,你可以簡單地做。sorted(d1, key=d1.get) == sorted(d2, key=d2.get)
輸出。False
編輯。
編輯。如果字典的長度不同,而你只想比較第一個共同的專案:
輸出:False
編輯。
d1 = {'a'/span>: 1, 'b': 0}。
d2 = {'a': 1, 'b': 0, 'c': 2}。
k1 = sorted(d1, key=d1.get)
k2 = sorted(d2, key=d2.get)
k1[:len(k2)] == k2[:len(k1)]
輸出。True
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/309473.html
標籤:
