【问题标题】:Need to print only the high priority key in dict, when a values search matches multiple keys ( python)当值搜索匹配多个键(python)时,只需要打印dict中的高优先级键
【发布时间】:2020-08-24 12:39:59
【问题描述】:

当搜索匹配多个dict值时,只需要打印最高优先级的KEY。

ERROR_CATEGORIES_TO_SEARCH_1 = {
                "VEHICAL_1" : ['CAR'],
                "VEHICAL_2": ['BIKE'],
        "VEHICAL_3"  : ["TRUCK"],
                "VEHICAL_4" : ['AEROPLANE'],
                "VEHICAL_5" : ['SHIP'],
        "VEHICAL_6"   : ['BOAT'],
                "VEHICAL_7" : ['CART'],
                "VEHICAL_8" : ['CYCLE']
            }
  
 
  prio_list = ['VEHICAL_1', 'VEHICAL_2' , 'VEHICAL_3' , 'VEHICAL_4', 'VEHICAL_5', 'VEHICAL_6','VEHICAL_7', 'VEHICAL_8']
 
 
  res = ERROR_CATEGORIES_TO_SEARCH_1.get(prio_list[0], ERROR_CATEGORIES_TO_SEARCH_1.get(prio_list[1], 
                                  ERROR_CATEGORIES_TO_SEARCH_1.get(prio_list[2], ERROR_CATEGORIES_TO_SEARCH_1.get(prio_list[3], ERROR_CATEGORIES_TO_SEARCH_1.get(prio_list[4], ERROR_CATEGORIES_TO_SEARCH_1.get(prio_list[5] , ERROR_CATEGORIES_TO_SEARCH_1.get(prio_list[6], ERROR_CATEGORIES_TO_SEARCH_1.get(prio_list[7]))))))))
MESSAGE_A  = "I bought a new CAR and a BIKE"
MESSAGE_B  = "WOW That SHIP is so huge and beautiful"
MESSAGE_C  = "only mode to travel through hill station is by TRUCK"
MESSAGE_D  = "First will ride on a CYCLE and then by BOAT"
resultant_key = [key for (key, lst) in ERROR_CATEGORIES_TO_SEARCH_1.items() for ele in lst if ele in MESSAGE_A]
//OUTPUT:: VEHICAL_1, VEHICAL_2

resultant_key = [key for (key, lst) in ERROR_CATEGORIES_TO_SEARCH_1.items() for ele in lst if ele in MESSAGE_B]
//OUTPUT:: VEHICAL_5

resultant_key = [key for (key, lst) in ERROR_CATEGORIES_TO_SEARCH_1.items() for ele in lst if ele in MESSAGE_c]
//OUTPUT:: VEHICAL_3

resultant_key = [key for (key, lst) in ERROR_CATEGORIES_TO_SEARCH_1.items() for ele in lst if ele in MESSAGE_D]
//OUTPUT :: VEHICAL_6, VEHICAL_8

由于我只需要打印要打印的优先键,以下是预期输出:

resultant_key = [key for (key, lst) in ERROR_CATEGORIES_TO_SEARCH_1.items() for ele in lst if ele in MESSAGE_A]
//OUTPUT:: VEHICAL_1


resultant_key = [key for (key, lst) in ERROR_CATEGORIES_TO_SEARCH_1.items() for ele in lst if ele in MESSAGE_D]
//OUTPUT :: VEHICAL_6

对此的任何建议都会有所帮助

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以将逻辑放在函数中,并在循环中使用 return 语句,仅返回第一个(即最高优先级)键。

    def find_highest(message):
        for key in prio_list:
            for word in ERROR_CATEGORIES_TO_SEARCH_1.get(key, []):
                if word in message:
                    return key
    
    >>> for message in (MESSAGE_A, MESSAGE_B, MESSAGE_C, MESSAGE_D):
    ...     print(find_highest(message))
    ... 
    VEHICAL_1
    VEHICAL_5
    VEHICAL_3
    VEHICAL_6
    

    【讨论】:

    • 我是 python 新手,我能解释一下吗:: for word in ERROR_CATEGORIES_TO_SEARCH_1.get(key, []):
    • dict.get(...) 的第二个参数是默认值,如果找不到密钥将返回(通常为:None)。但是对于默认的空列表,迭代 for word in ... 仍然有效(迭代步数 = 0,而不是迭代失败,因为您无法迭代 None)。它与您在巨大的 res = ... 声明中使用的相同,您根本不需要,在此答案中进行了更改,另请参阅 docs.python.org/3/library/stdtypes.html#dict.get
    • 谢谢,这让人困惑 :: key, []
    猜你喜欢
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 2015-05-18
    • 2023-04-07
    相关资源
    最近更新 更多