为了账号安全,请及时绑定邮箱和手机立即绑定

比较 python 字典中的列表值

比较 python 字典中的列表值

拉丁的传说 2022-08-02 17:04:34
我认为这是非常基本的,但我很难找到解决这个问题的方法。在下面的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()}


查看完整回答
反对 回复 2022-08-02
?
森栏

TA贡献1810条经验 获得超5个赞

把它做成一行。它也寻找用于比较的第三个元素(而不仅仅是第二个元素)。

它会创建一个字典两次。首先将第一个元素作为键,然后使用其值生成结果。

dict({v[0]:(k,v) for v,k in sorted((v,k) for k,v in test_dict.items())}.values())


查看完整回答
反对 回复 2022-08-02
?
神不在的星期二

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')}


查看完整回答
反对 回复 2022-08-02
  • 3 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信