猿问

比较 python 字典中的列表值

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

  1. 值的元素在其他键值对的值中不重复,

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

换句话说,我需要得到

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

任何提示都是值得赞赏的。


拉丁的传说
浏览 94回答 3
3回答

MM们

我将使用由值的第一个元素索引的辅助映射: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()}

森栏

把它做成一行。它也寻找用于比较的第三个元素(而不仅仅是第二个元素)。它会创建一个字典两次。首先将第一个元素作为键,然后使用其值生成结果。dict({v[0]:(k,v) for v,k in sorted((v,k) for k,v in test_dict.items())}.values())

神不在的星期二

我会使用理解,解开所有元素以保持清洁。尝试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]: outOut[2]: {'a': ('bc', '5', '0'), 'b': ('nc', '8', '5')}
随时随地看视频慕课网APP

相关分类

Python
我要回答