将列表值与python字典进行比较

时间:2020-02-17 13:06:43

标签: python list dictionary

我认为这是非常基本的,但是我很难找到一种解决方法。 在下面的python字典中(值是列表),如何方便地比较每个键值对的值? 例如,如何在以下位置检索键值对:

  1. 值的元素不会在其他键值对

  2. 中重复
  3. 如果该值的第一个元素存在于其他值中,请选择该值的第二个元素较大的对。

换句话说,我需要获得

"a": ["bc", "5", "0"]
"b": ["nc", "8", "5"]
test_dict = {"a": ["bc", "5", "0"], "b": ["nc", "8", "5"], "c": ["bc", "3", "0"]}

任何提示都值得赞赏。

3 个答案:

答案 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())