首页 > 解决方案 > 根据键的值过滤字典列表

问题描述

如果字典列表中的两个值相同,我希望仅使用其中一个字典过滤列表。我不关心第二个(或第三个匹配的字典)。

crcs = [
        {'compress_name': 'file1.bin', 'crc': '55A0669C', 'name': 'R:\\filepath\\system\\compress1.zip'},
        {'compress_name': 'file3.bin', 'crc': '55A0669C', 'name': 'R:\\filepath\\system\\compress2.zip'},
        {'compress_name': 'file2.bin', 'crc': '66B07710', 'name': 'R:\\filepath\\system\\compress2.zip'},
        {'compress_name': 'file5.bin', 'crc': '66B07710', 'name': 'R:\\filepath\\system\\compress3.zip'}
    ]

预期结果是具有不同“crc”值的两个字典的列表。

[
        {'compress_name': 'file1.bin', 'crc': '55A0669C', 'name': 'R:\\filepath\\system\\compress1.zip'},
        {'compress_name': 'file2.bin', 'crc': '66B07710', 'name': 'R:\\filepath\\system\\compress2.zip'},
    ]

或匹配 55A0669C 和 66B07710 的 CRC 值的任何其他组合。字典列表可能有 400 个或更多项。

我正在使用 python 3.7

标签: pythonpython-3.xdictionaryfilter

解决方案


如果只有 crc 需要唯一,那么你可以使用

crcs = [ {'compress_name': 'file1.bin', 'crc': '55A0669C', 'name': 'R:\filepath\system\compress1.zip'}, {'compress_name': 'file3.bin', 'crc': '55A0669C', 'name': 'R:\filepath\system\compress2.zip'}, {'compress_name': 'file2.bin', 'crc': '66B07710', 'name': 'R:\filepath\system\compress2.zip'}, {'compress_name': 'file5.bin', 'crc': '66B07710', 'name': 'R:\filepath\system\compress3.zip'} ]

crcs_all = []
crcs_uniq = []

for i in range(len(crcs)):
    crc = crcs[i]['crc']
    if crc not in crcs_all:
        crcs_all.append(crc)
        crcs_uniq.append(crcs[i])

print(crcs_uniq)

那会给你

    [ {'compress_name': 'file1.bin', 'crc': '55A0669C', 'name': 'R:\x0cilepath\\system\\compress1.zip'}, 
      {'compress_name': 'file2.bin', 'crc': '66B07710', 'name': 'R:\x0cilepath\\system\\compress2.zip'}]

推荐阅读