如何在两个数组中找到匹配项,其中包含字典?

How can I find matches in two arrays with dictionaries in them?

我有以下问题。我想用字典比较两个列表并找到匹配项。

架构列表 A:

[
  {
    authorID: string,
    articleID: string
  }
]

架构列表 B:

[
  {
    authorID: string,
    firstName: string,
    lastName: string
  }
]

列表A的长度为1653,列表B的长度为1344。

这是我用来比较列表和重新保存匹配项的代码。

def unitedListArticleAuthor(listA, listB):
    new_list = []
    for article in listA:
        for author in listB:
            if article["authorID"] == author["authorID"]:
                new_list.append({
                    "articleID": article["articleID"],
                    "authorID": article["authorID"],
                    "firstName": author["firstName"],
                    "lastName": author["lastName"],
                })

现在新列表的长度是1667。这意味着一定是某处出错了,因为列表A是最大的,只需要匹配列表B。只需要匹配作者ID在每篇文章中添加作者姓名。

我的错误是什么?

正如 Sayse 所说,很可能存在同一个 authorID 的多个实例。

您似乎很确定情况并非如此,但请尝试添加这样的 break 语句:

def unitedListArticleAuthor(listA, listB):
    new_list = []
    for article in listA:
        for author in listB:
            if article["authorID"] == author["authorID"]:
                new_list.append({
                    "articleID": article["articleID"],
                    "authorID": article["authorID"],
                    "firstName": author["firstName"],
                    "lastName": author["lastName"],
                })
                break