[英]Combining elements of two lists as key:value pairs in a dictionary goes wrong. Python 3x
[英]Getting sorted key value pairs from a dictionary based on two lists with unique elements
我有两个列表( List1
和List2
以及一个字典,其中包含键-值对,其中键是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.