检查字典列表中的值是否唯一(无键)

2024-06-16 10:19:36 发布

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

我有一本像下面这样的字典:

d = {
    "00068693": [
        {"LABP": "022012"},
        {"LAOS": "022012"},
        {"LAOS": "022012"},
        {"LAOS": "022012"},
        {"LAOS": "022012"},
        {"LAOS": "022012"},
        {"LABC": "022012"},
        {"LACL": "022012"},
        {"LACL": "022012"},
        {"LACL": "022012"},
        {"LACL": "349309"},
    ],
    "00084737": [
        {"LABP": "022012"},
        {"LAOS": "022012"},
        {"LABC": "022012"},
        {"LACL": "022012"},
    ]
}

我的代码的目标是检查ID(例如:"00068693")是否在所有文件(例如:"LAOS")上都有唯一的代码(例如:"022012"

因此,本例的输出应为:

ID: "00068693" has different codes.
ID: "00084737" has a unique code.

但是,我如何检查这个

因为我不知道ID包含哪些文件,所以无法通过列表中的每个键进行访问

我不想比较元素,只想比较每个dict的值,但它们都在不同的列表索引上,我不知道键


Tags: 文件代码id目标列表字典codeshas
2条回答

你可以Check if all elements in a list are identical。问题是哪个名单?嗯,您需要构建一个所有文件的代码列表。我们并不真正关心这些文件是什么,只关心它们的代码:

for ID, files_list in d.items():
    codes = [list(file_dict.values())[0] for file_dict in files_list]
    print(codes)
    print(f"The codes for ID {ID} are all equal? {all_equal(codes)}")

根据您的示例dict,结果如下:

['022012', '022012', '022012', '022012', '022012', '022012', '022012', '022012', '022012', '022012', '349309']
The codes for ID 00068693 are all equal? False
['022012', '022012', '022012', '022012']
The codes for ID 00084737 are all equal? True

*all_equal以上是副本的可接受答案中的任何选项

假设您的字典名为file_codes,则以下是获得结果的方式:

for k, v in file_codes.items():
    if len(set([i[j] for i in v for j in i])) != 1:
            print(f"IDS: {k} has different codes")

相关问题 更多 >