我認為這是非常基本的,但我很難找到解決這個問題的方法。在下面的python字典中(其中值是列表),我如何方便地比較每個鍵值對的值?例如,如何檢索鍵值對,其中:值的元素在其他鍵值對的值中不重復,如果值的第一個元素存在于其他值中,請選擇該值的第二個元素較大的對。換句話說,我需要得到"a": ["bc", "5", "0"]"
b": ["nc", "8", "5"]test_dict = {"a": ["bc", "5", "0"], "b": ["nc", "8", "5"], "c": ["bc", "3", "0"]}任何提示都是值得贊賞的。
3 回答

MM們
TA貢獻1886條經驗 獲得超2個贊
我將使用由值的第一個元素索引的輔助映射:
aux = {}
for k, v in test_dict.items():
if v[0] in aux:
if v[1] > aux[v[0]][1][1]:
aux[v[0]] = (k, v)
else: aux[v[0]] = (k, v)
resul = {k: v for k,v in aux.values()}

森欄
TA貢獻1810條經驗 獲得超5個贊
把它做成一行。它也尋找用于比較的第三個元素(而不僅僅是第二個元素)。
它會創(chuàng)建一個字典兩次。首先將第一個元素作為鍵,然后使用其值生成結果。
dict({v[0]:(k,v) for v,k in sorted((v,k) for k,v in test_dict.items())}.values())

神不在的星期二
TA貢獻1963條經驗 獲得超6個贊
我會使用理解,解開所有元素以保持清潔。嘗試
In [1]: out = {k:(v1, v2, v3) for k, (v1, v2, v3) in test_dict.items() if k not in v1 and int(v2) > int(v3)}
In [2]: out
Out[2]: {'a': ('bc', '5', '0'), 'b': ('nc', '8', '5')}
添加回答
舉報
0/150
提交
取消