首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在两个python字典之间的每个公共键中减去两个列表的最有效方法

在两个python字典之间的每个公共键中减去两个列表的最有效方法
EN

Stack Overflow用户
提问于 2020-04-15 13:46:41
回答 1查看 80关注 0票数 0

所以我有两个字典,对于它们的共同键,我想找出每个元素在各自的列表中的区别,顺序在输出中并不重要。

,这里是一个小例子

代码语言:javascript
复制
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]

这里是一个用许多普通键和不常见键设置更大字典的示例。

代码语言:javascript
复制
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)) ]
EN

回答 1

Stack Overflow用户

发布于 2020-04-15 13:46:41

目前我尽力优化它,将键上的&作为一个集合调用,然后扩展每个键的列表。不过,我不确定这是否是最理想的。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61230361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档