我认为这是非常基本的,但我很难找到解决这个问题的方法。在下面的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个赞
把它做成一行。它也寻找用于比较的第三个元素(而不仅仅是第二个元素)。
它会创建一个字典两次。首先将第一个元素作为键,然后使用其值生成结果。
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
提交
取消