繁体   English   中英

我正在尝试测试一个 function,它对一个嵌套的字典数组进行排序购买键“createdAt”但是遇到了一个属性错误

[英]I am trying test a function that sorts a nested array of dictionaries buy the key "createdAt" but coming across an attribute error

简而言之,我收到一个 project_versions_items 列表作为字典列表,使用“CreatedAt”键对该列表进行排序并将该列表与 delete_list(结构为 dic 列表)进行比较。 如果该项目尚不存在,则 6 oldest/createdAt 将附加到 delete_list。

我已经检查了视频和文档,并且知道我在使用嵌套词典的正确轨道上,但现在无法弄清楚我哪里出错了

但是,上面的错误不断出现,我并没有用尽所有选择 - 请帮忙。

终端错误:

py::test__total_count_check Failed: \[undefined\]AttributeError: 'dict' object has no attribute 'sort'

测试用例:

`
def test__total_count_check():
input_project_items = load_json_fixture(
"fixtures/blackduck/api.project.createdAt.json"
)
input_delete_list = \[\]
expected_delete_list_ouput = \[\]
\# WHEN
populate_blackduck_delete_list = total_count_check(
input_project_items, input_delete_list
)
\# THEN
assert populate_blackduck_delete_list == expected_delete_list_ouput
`

expected_delete 字典列表数组中的 6 项示例如下:

`
"items": \[
{
"versionName": "CICD-1264",
"phase": "DEVELOPMENT",
"distribution": "EXTERNAL",
"license": {
"type": "DISJUNCTIVE",
"licenses": \[
{
"license": "XYZ",
"licenses": \[\],
"name": "Unknown License",
"ownership": "UNKNOWN",
"licenseDisplay": "Unknown License",
"licenseFamilySummary": {
"name": "Unknown",
"href": "XYZ"
}
}
\],
"licenseDisplay": "Unknown License"
},
"createdAt": "2022-07-27T10:09:52.490Z",
"createdBy": "XYZ",
"createdByUser": "XYZ",
"settingUpdatedAt": "2022-07-27T10:09:52.490Z",
"settingUpdatedBy": "XYZ",
"settingUpdatedByUser": "XYZ",
"source": "CUSTOM",
"\_meta": {
"allow": \[
"DELETE",
"GET",
"PUT"
\],
`

和原来的function如下:

`
def total_count_check(project_version_items, delete_list):
project_version_items.sort(key=operator.itemgetter("createdAt"))
for item in project_version_items:
if item not in delete_list:
delete_list.append(item)
if len(delete_list) \>= 6:
break
return delete_list
`

project_version_items.sort(key=operator.itemgetter("createdAt")) 我知道错误不喜欢排序,但在各种文档中这应该没问题吗?

你提供了零碎的数据,所以还不是很清楚,但我认为你正在传递一个带有名为“items”的键的字典(因为它来自 a.json)。 “items”键的值是一个列表。 大概这个列表是可排序的,但是,您正在将 the.sort() function 应用于字典。 而是将其应用于“items”键的值。

所以,如果我试图弄清楚你在做什么,它可能看起来像这样:

import operator

someDict = {
    "items": [
        {
            "versionName": "CICD-1264",
            "phase": "DEVELOPMENT",
            "distribution": "EXTERNAL",
            "license": {
                "type": "DISJUNCTIVE",
                "licenses": [
                    {
                        "license": "XYZ",
                        "licenses": [],
                        "name": "Unknown License",
                        "ownership": "UNKNOWN",
                        "licenseDisplay": "Unknown License",
                        "licenseFamilySummary": {
                            "name": "Unknown",
                            "href": "XYZ"
                        }
                    }
                ],
                "licenseDisplay": "Unknown License"
            },
            "createdAt": "2022-07-27T10:09:52.490Z",
            "createdBy": "XYZ",
            "createdByUser": "XYZ",
            "settingUpdatedAt": "2022-07-27T10:09:52.490Z",
            "settingUpdatedBy": "XYZ",
            "settingUpdatedByUser": "XYZ",
            "source": "CUSTOM",
            "_meta": {
                "allow": [
                    "DELETE",
                    "GET",
                    "PUT"
                ],
            }
        },
{
            "versionName": "CICD-1264",
            "phase": "DEVELOPMENT",
            "distribution": "EXTERNAL",
            "license": {
                "type": "DISJUNCTIVE",
                "licenses": [
                    {
                        "license": "XYZ",
                        "licenses": [],
                        "name": "Unknown License",
                        "ownership": "UNKNOWN",
                        "licenseDisplay": "Unknown License",
                        "licenseFamilySummary": {
                            "name": "Unknown",
                            "href": "XYZ"
                        }
                    }
                ],
                "licenseDisplay": "Unknown License"
            },
            "createdAt": "2022-07-27T10:09:51.490Z",
            "createdBy": "XYZ",
            "createdByUser": "XYZ",
            "settingUpdatedAt": "2022-07-27T10:09:52.490Z",
            "settingUpdatedBy": "XYZ",
            "settingUpdatedByUser": "XYZ",
            "source": "CUSTOM",
            "_meta": {
                "allow": [
                    "DELETE",
                    "GET",
                    "PUT"
                ],
            }
        }        
    ]
}

someDict["items"].sort(key=operator.itemgetter("createdAt"))
print(someDict)

output 看起来像这样:

{'items': [{'versionName': 'CICD-1264', 'phase': 'DEVELOPMENT', 'distribution': 'EXTERNAL', 'license': {'type': 'DISJUNCTIVE', 'licenses': [{'license': 'XYZ', 'licenses': [], 'name': 'Unknown License', 'ownership': 'UNKNOWN', 'licenseDisplay': 'Unknown License', 'licenseFamilySummary': {'name': 'Unknown', 'href': 'XYZ'}}], 'licenseDisplay': 'Unknown License'}, 'createdAt': '2022-07-27T10:09:51.490Z', 'createdBy': 'XYZ', 'createdByUser': 'XYZ', 'settingUpdatedAt': '2022-07-27T10:09:52.490Z', 'settingUpdatedBy': 'XYZ', 'settingUpdatedByUser': 'XYZ', 'source': 'CUSTOM', '_meta': {'allow': ['DELETE', 'GET', 'PUT']}}, {'versionName': 'CICD-1264', 'phase': 'DEVELOPMENT', 'distribution': 'EXTERNAL', 'license': {'type': 'DISJUNCTIVE', 'licenses': [{'license': 'XYZ', 'licenses': [], 'name': 'Unknown License', 'ownership': 'UNKNOWN', 'licenseDisplay': 'Unknown License', 'licenseFamilySummary': {'name': 'Unknown', 'href': 'XYZ'}}], 'licenseDisplay': 'Unknown License'}, 'createdAt': '2022-07-27T10:09:52.490Z', 'createdBy': 'XYZ', 'createdByUser': 'XYZ', 'settingUpdatedAt': '2022-07-27T10:09:52.490Z', 'settingUpdatedBy': 'XYZ', 'settingUpdatedByUser': 'XYZ', 'source': 'CUSTOM', '_meta': {'allow': ['DELETE', 'GET', 'PUT']}}]}

我构建了修改后的 dict,这样排序将具有根据 createdAt 字段的值切换上面的第一项和第二项的效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM