我认为这是非常基本的,但是我很难找到一种解决方法。 在下面的python字典中(值是列表),如何方便地比较每个键值对的值? 例如,如何在以下位置检索键值对:
值的元素不会在其他键值对
如果该值的第一个元素存在于其他值中,请选择该值的第二个元素较大的对。
换句话说,我需要获得
"a": ["bc", "5", "0"]
"b": ["nc", "8", "5"]
test_dict = {"a": ["bc", "5", "0"], "b": ["nc", "8", "5"], "c": ["bc", "3", "0"]}
任何提示都值得赞赏。
答案 0 :(得分:1)
我将使用由值的第一个元素索引的辅助映射:
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()}
答案 1 :(得分:1)
我会理解,解开所有元素以保持环境整洁。试试
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')}
答案 2 :(得分:1)
将其制成单线。它还会寻找用于比较的第三个元素(而不仅仅是第二个)。
它两次创建 dict 。首先使用第一个元素作为键,然后使用其值生成结果。
dict({v[0]:(k,v) for v,k in sorted((v,k) for k,v in test_dict.items())}.values())