代码之家  ›  专栏  ›  技术社区  ›  S Andrew

如何在python中比较dict列表中的项和值

  •  0
  • S Andrew  · 技术社区  · 4 年前

    我有一个dicts的输出列表:

    # outList
    [{'Current NAV': 22, 'status': 'Confirmed'},
     {'Current NAV': 25, 'status': 'Confirmed'},
     {'Current NAV': 31, 'status': 'Confirmed'},
     {'Current NAV': 55, 'status': 'Rejected'},
     {'Current NAV': 65, 'status': 'Rejected'},
     {'Amount Requested': 50, 'status': 'Confirmed'},
     {'Amount Requested': 55, 'status': 'Confirmed'},
     {'Amount Requested': 60, 'status': 'Confirmed'},
     {'Amount Requested': 80, 'status': 'Rejected'},
     {'Amount Requested': 90, 'status': 'Rejected'}]
    

    上述数据包含有关属性的信息,即。 Current NAV Amount Requested ,其价值和地位。我有一个下面的dict输入列表:

    # fieldValList
    [{'name': 'Current NAV', 'value': 33},
     {'name': 'Amount Requested', 'value': 45}]
    

    我必须比较 当前NAV 请求的金额 从…起 fieldValList 具有 outList 这样我就可以得到outList中有多少值更接近 当前NAV 值,即。 33 .在这种情况下 22, 25, 31 接近33,而值 55, 65 离它很远,因此 Confirmed 状态变为 3/5 虽然 Rejected 变成 2/5 。类似于 请求的金额 55, 65, 50 接近45 80, 90 离它很远,因此 已确认 状态变为 3/5 虽然 已拒绝 变成 2/5

    我没有任何关于如何继续构建逻辑的想法。请提出任何建议,谢谢。

    0 回复  |  直到 4 年前
        1
  •  1
  •   SergFSM    4 年前

    类似地,对于请求金额55、65、50更接近45,而80、90则远离45,因此确认状态变为3/5,而拒绝状态变为2/5。

    这是否意味着你想为“fieldValList”中的每个名称从“outList”中获得“status”的分数?如果是,那么这是一个提示:

    from fractions import Fraction
    
    # note that the list has been mutated
    outList =[
        {'Current NAV': 22, 'status': 'Confirmed'},
        {'Current NAV': 25, 'status': 'Confirmed'},
        {'Current NAV': 31, 'status': 'Confirmed'},
        {'Current NAV': 55, 'status': 'Rejected'},
        {'Current NAV': 65, 'status': 'Rejected'},
        {'Amount Requested': 50, 'status': 'Confirmed'},
        {'Amount Requested': 55, 'status': 'Confirmed'},
        {'Amount Requested': 80, 'status': 'Rejected'},
        {'Amount Requested': 90, 'status': 'Rejected'}]
    fieldValList = [
        {'name': 'Current NAV', 'value': 33},
        {'name': 'Amount Requested', 'value': 45}]
    
    for i in fieldValList:
        n = [j['status']=='Confirmed' for j in outList if i['name'] in j]
        print(f"name: {i['name']}, Confirmed: {Fraction(sum(n), len(n))}")
    
    >>> out
    '''
    name: Current NAV, Confirmed: 3/5
    name: Amount Requested, Confirmed: 1/2
    

    否则,如前所述,您应该定义被视为 “更近”