Python 基于键的值筛选字典列表

Python 基于键的值筛选字典列表,python,python-3.x,dictionary,filter,Python,Python 3.x,Dictionary,Filter,如果字典列表中的两个值相同,我希望只使用其中一个字典对列表进行筛选。我不在乎匹配的第二本(或第三本)词典 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'}, {'co

如果字典列表中的两个值相同,我希望只使用其中一个字典对列表进行筛选。我不在乎匹配的第二本(或第三本)词典

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解决方案 您可以使用caste将字典列表放入数据帧中,然后选择唯一的
crc
值。最后,您可以使用
list.index(crc)
获得重复
crc
值的第一次出现,并将其存储在列表
unique\u idx
中。我们使用这个
unique\u idx
从数据帧
df
中过滤出相关行,然后将该数据提取为
dict

短解
将熊猫作为pd导入
df=pd.数据帧(crcs)
unique_crcs=df.crc.unique().tolist()
唯一的_idx=[]
对于唯一的crc中的crc:
唯一的\u idx.append(所有\u crcs.index(crc))
dfu=df.iloc[unique_idx]
dfu.T.to_dict()
输出

{0: {'compress_name': 'file1.bin',
  'crc': '55A0669C',
  'name': 'R:\\filepath\\system\\compress1.zip'},
 2: {'compress_name': 'file2.bin',
  'crc': '66B07710',
  'name': 'R:\\filepath\\system\\compress2.zip'}}
  compress_name       crc                              name
0     file1.bin  55A0669C  R:\filepath\system\compress1.zip
1     file3.bin  55A0669C  R:\filepath\system\compress2.zip
2     file2.bin  66B07710  R:\filepath\system\compress2.zip
3     file5.bin  66B07710  R:\filepath\system\compress3.zip
{'55A0669C': 0, '66B07710': 2}
['55A0669C', '55A0669C', '66B07710', '66B07710']
{0: {'compress_name': 'file1.bin',
  'crc': '55A0669C',
  'name': 'R:\\filepath\\system\\compress1.zip'},
 2: {'compress_name': 'file2.bin',
  'crc': '66B07710',
  'name': 'R:\\filepath\\system\\compress2.zip'}}
详细解决方案 1.制作数据
将熊猫作为pd导入
crcs=[{'compress_name':'file1.bin','crc':'55A0669C','name':r'r:\filepath\system\compress1.zip'},
{'compress_name':'file3.bin','crc':'55A0669C','name':r'r:\filepath\system\compress2.zip'},
{'compress_name':'file2.bin','crc':'66B07710','name':r'r:\filepath\system\compress2.zip'},
{'compress_name':'file5.bin','crc':'66B07710','name':r'r:\filepath\system\compress3.zip'}]
df=pd.数据帧(crcs)
打印(df)
输出

{0: {'compress_name': 'file1.bin',
  'crc': '55A0669C',
  'name': 'R:\\filepath\\system\\compress1.zip'},
 2: {'compress_name': 'file2.bin',
  'crc': '66B07710',
  'name': 'R:\\filepath\\system\\compress2.zip'}}
  compress_name       crc                              name
0     file1.bin  55A0669C  R:\filepath\system\compress1.zip
1     file3.bin  55A0669C  R:\filepath\system\compress2.zip
2     file2.bin  66B07710  R:\filepath\system\compress2.zip
3     file5.bin  66B07710  R:\filepath\system\compress3.zip
{'55A0669C': 0, '66B07710': 2}
['55A0669C', '55A0669C', '66B07710', '66B07710']
{0: {'compress_name': 'file1.bin',
  'crc': '55A0669C',
  'name': 'R:\\filepath\\system\\compress1.zip'},
 2: {'compress_name': 'file2.bin',
  'crc': '66B07710',
  'name': 'R:\\filepath\\system\\compress2.zip'}}
选择唯一的CRC行
unique\u crcs=df.crc.unique().tolist()
all_crcs=df.crc.to_list()
唯一的_idx=[]
uniques=dict()
对于唯一的crc中的crc:
idx=所有crc索引(crc)
更新({crc:idx})
唯一的\u idx.append(idx)
打印(uniques)
打印(所有CRC)
输出

{0: {'compress_name': 'file1.bin',
  'crc': '55A0669C',
  'name': 'R:\\filepath\\system\\compress1.zip'},
 2: {'compress_name': 'file2.bin',
  'crc': '66B07710',
  'name': 'R:\\filepath\\system\\compress2.zip'}}
  compress_name       crc                              name
0     file1.bin  55A0669C  R:\filepath\system\compress1.zip
1     file3.bin  55A0669C  R:\filepath\system\compress2.zip
2     file2.bin  66B07710  R:\filepath\system\compress2.zip
3     file5.bin  66B07710  R:\filepath\system\compress3.zip
{'55A0669C': 0, '66B07710': 2}
['55A0669C', '55A0669C', '66B07710', '66B07710']
{0: {'compress_name': 'file1.bin',
  'crc': '55A0669C',
  'name': 'R:\\filepath\\system\\compress1.zip'},
 2: {'compress_name': 'file2.bin',
  'crc': '66B07710',
  'name': 'R:\\filepath\\system\\compress2.zip'}}
仅使用唯一的CRC重读进行Dict
dfu=df.iloc[unique_idx]
dfu.T.to_dict()
输出

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

如果只有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'}]

你试过什么?请自己尝试解决这个问题。