求获取两个字典中相同键的公共元素的有效交集方法(Python)

2024-06-26 14:53:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着在两本字典里找出每一个键的常用项。也许下面的代码可以更好地解释我的目的。我有太多的记录,因此这段代码需要很长时间才能运行;有什么方法可以有效地编写它?在

rcmd = {'1':{"A","B"},"2":{"A","C"},"3":{"B","C","D"}}   
rmv = {'1':{"C","B"},"2":{"A","C"},"3":{"B","C","A"},"4":{"A"}}

correct_rcmd = []
for i in range(len(rcmd)):
    for j in range(len(rmv)):
        if rcmd.keys()[i] == rmv.keys()[j]:
            correct_rcmd.append(rcmd.values() 
[i].intersection(rmv.values()[j]))
print correct_rcmd

Tags: 方法代码in目的forlenif字典
1条回答
网友
1楼 · 发布于 2024-06-26 14:53:19

您永远不应该在字典的键中使用索引,尤其是如果您使用python2.x(正如您使用print而不使用任何())的情况下更是如此。在

字典中的键的顺序在3.6之前(仅对于CPython作为实现细节的副作用)或python3.7中的默认顺序是不固定的。在

然后顺序是插入顺序-如果您以不同的顺序插入键,索引到keys()仍然会中断,因为您正在混合不同键的值!。在

rcmd = {'1':{"A","B"},"2":{"A","C"},"3":{"B","C","D"}}   
rmv = {'1':{"C","B"},"2":{"A","C"},"3":{"B","C","A"},"4":{"A"}}

# get all keys that are common in both dictionaries
# python 2 or 3:
keys_that_are_same = set(rcmd) & set(rmv)
# for python 3 better, as it uses the key-sets directly: 
# keys_that_are_same = rcmd.keys() & rmv.keys()

# loop over both keys and get the intersection into a new dict:
common = {}
for key in keys_that_are_same:
    common[key] = rcmd[key] & rmv[key]

# as dict comprehension - no loop needed: 
# common = {k : rcmd[k] & rmv[k] for k in keys_that_are_same} 

print(common)

输出:

^{pr2}$

这还有一个好处:使用较少的需要构造和处理的对象,以及使用集合来减少要处理的键的数量。如果你使用的是python2。在

相关问题 更多 >