繁体   English   中英

从基于两个具有唯一元素的列表的字典中获取排序的键值对

[英]Getting sorted key value pairs from a dictionary based on two lists with unique elements

我有两个列表( List1List2以及一个字典,其中包含键-值对,其中键是List1+List2元素,而值是数字值。

我要返回的是字典的字典,其中键将作为List1的每个元素作为键,值将是从字典中提取的List2的所有元素。

作为理论上的例子,这就是我要解决的问题:

List_1 = ['A', 'B', 'C', 'D']

List_2 = ['E' ,'F' ,'G' ,'H']

Old_Dict = {'A':0.12, 'B':0.3, 'C':0.22, 'D':0.35, 'E':0.12, 'F':0.23, 'G':0.32, 'H':0.14}

我想返回的是(dict值应按最小绝对diff到最高绝对diff进行排序。即对于第一个键A,列表差异为E (0.12-0.12) ,第二个为H (0.14-0.12)接下来是F(0.23-0.12) ,接下来是G(0.32-0.12) ,因此在对值进行排序时E,H,F,G顺序为E,H,F,G

New_dict(返回)

{
    'A': {'E':0.12, 'H':0.14, 'F':0.23, 'G':0.32},
    'B': {'G':0.32, 'F':0.23, 'H':0.14, 'E':0.12},
    'C': {'F':0.23, 'H':0.14, 'E':0.12, 'G':0.32},
    'D': {'G':0.32, 'F':0.23, 'H':0.14, 'E':0.12}
}

不需要在内部循环中调用sorted
现在product_dict处于所需的形式。

def Nearest_cluster (ListA,ListB,dict1):
    product_dict={}
    for elem in ListA:
        elem_val = dict1.get(elem)
        holding_dict = {}
        for item in ListB:
            item_val = dict1.get(item)
            diff = abs(elem_val - item_val)
            holding_dict[item] = diff
        holding_dict2 = sorted(holding_dict.items(), key = lambda x: x[1])
        product_dict[elem] = [(k[0],dict1[k[0]]) for k in holding_dict2]
    return product_dict

>>> Nearest_cluster(List_1, List_2, Old_Dict)
{'C': [('F', 0.23), ('H', 0.14), ('G', 0.32), ('E', 0.12)],
'B': [('G', 0.32), ('F', 0.23), ('H', 0.14), ('E', 0.12)],
'D': [('G', 0.32), ('F', 0.23), ('H', 0.14), ('E', 0.12)],
'A': [('E', 0.12), ('H', 0.14), ('F', 0.23), ('G', 0.32)]}

我通过以下方法解决了该问题,但想知道是否有人可以更好地执行N运算:

def Nearest_cluster (ListA,ListB,dict1):
    product_dict = {}
    for elem in ListA:
        elem_val = dict1.get(elem)
        holding_dict = {}
        for item in ListB:
            item_val = dict1.get(item)
            diff = abs(elem_val-item_val)
            holding_dict[item] = diff
        holding_dict2=sorted(holding_dict.items(), key=lambda x: x[1])
        product_dict[elem] = holding_dict2
    return product_dict

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM