如何在不考虑ord的情况下匹配两个字典索引

2024-09-30 16:39:44 发布

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

我正在尝试比较两个字典索引,并返回一个索引列表,这些索引不分顺序地匹配。我还尝试在不加载任何包/库的情况下执行此操作。你知道吗

(如果这是SQL,那么它将是两个表的INNER JOIN

我试过这样做:Finding matching keys in two large dictionaries and doing it fast

但它只返回字典索引匹配的确切位置。你知道吗

我也试过这个: https://learning.oreilly.com/library/view/python-cookbook/0596001673/ch01s09.html

问题:给定两个字典,您需要找到两个字典中的键集。你知道吗

#Attempt 1 (using 1st source from Stack Overflow):

dict1 = {'x': [8, 8, 1, 8, 2, 1], 'v': [0.98, 0.24, 0.91, 0.03, 0.04, 0.75]}
dict2 = {'x': [0, 8, 8, 1, 3, 3], 'v': [0.98, 0.78, 0.66, 0.08, 0.42, 0.21, 0.04]}

def common_indx(dict1,dict2):
    dict1Set = set(dict1['x'])
    dict2Set = set(dict2['x'])

    for name in dict1Set.intersection(dict2Set):
        return(name)

common_indx(dict1,dict2)

Out: 8
#Attempt 2 (Using Python Cookbook):

intersect = []
for item in some_dict.keys(  ):
    if another_dict.has_key(item):
        intersect.append(item)
print "Intersects:", intersect

这不起作用,因为它在python2中,但这本书正是我需要做的。你知道吗

我的预期结果是[1,8],这只是两个字典中匹配的索引,而不管位置如何。你知道吗


Tags: nameinfor字典commonkeysitemintersect
1条回答
网友
1楼 · 发布于 2024-09-30 16:39:44

您的错误是,您立即返回第一个名字:

for name in dict1Set.intersection(dict2Set):
    return(name)

您应该将交叉点改为列表:

return list(dict1Set.intersection(dict2Set))

或者只返回集合本身,而不转换为列表。也可以对两个集合使用&运算符:

return list(set(dict1['x']) & set(dict2['x']))

Python cookbook代码与键相交,而您自己的代码与单个键的值相交。那是不一样的。你知道吗

否则它不起作用,因为在python3中删除了dictionary.has_key()方法,但是您可以使用key in dictionary。也可以与dictionary view objects for the keys相交:

shared_keys = dict1.keys() & dict2.keys()  # The intersection of the keys

相关问题 更多 >