簡體   English   中英

在兩個 python 字典之間的每個公共鍵中的兩個列表之間進行減法的最有效方法

[英]Most efficient way to subtract between two list in every common keys between two python dictionaries

所以我有兩個字典,對於它們的公共鍵,我想找到各個列表的每個元素的差異,output 中的順序無關緊要。

這是一個小例子

x={
    '1' : [1,2,3],
    '2' : [2,9]
}
y={
    '1' : [4,5],
    '3' : [8,9]
}

# Common key is '1' , so z is the list of the subtraction of elements of key '1'
>> expected_output = [-3, -2, -1, -4, -3, -2]
                   = [1-4,2-4,3-4, 1-5,2-5,3-5]

這是一個使用許多常用鍵和不常用鍵設置更大字典的示例

import random

x={}
y={}
num_same_keys = 100
num_diff_keys = 200

## Generating common keys with arbitrary number of elements
common_key = random.randint(0,10000)
for _ in range(num_same_keys) : 
    while common_key in x : common_key = random.randint(0,10000)
    x[common_key] = [ random.randint(0,1000) for _ in range(random.randint(1,10)) ]
    y[common_key] = [ random.randint(0,1000) for _ in range(random.randint(1,10)) ]

## Generating different keys with arbitrary number of elements
x_key = random.randint(0,10000)
y_key = random.randint(0,10000)
for _ in range(num_diff_keys) : 
    # Adding to x    
    while (x_key in x) and (x_key in y) : x_key = random.randint(0,10000)
    x[x_key] = [ random.randint(0,1000) for _ in range(random.randint(1,10)) ]
    # Adding to y
    while (y_key in x) and (y_key in y) : y_key = random.randint(0,10000)
    y[y_key] = [ random.randint(0,1000) for _ in range(random.randint(1,10)) ]

目前,我盡我所能通過在鍵上調用&作為一組來優化它,然后為每個鍵擴展列表。 但是我不確定它是否是最優化的。

def f1(x,y):
    z = []
    for element in x.keys() & y.keys():
        z.extend([xval-yval for xval in x[element] for yval in y[element] ])
    return z

outputlist = f1(x,y)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM