Решение
Вы можете использовать приведение списка словарей в фрейм данных, а затем выбрать уникальные значения crc
. Наконец, вы можете получить первые вхождения дубликатов crc
значений с помощью list.index(crc)
и сохранить их в списке unique_idx
. Мы используем это unique_idx
, чтобы отфильтровать соответствующие строки из кадра данных df
, а затем извлечь эти данные как dict
.
Краткое решение
import pandas as pd
df = pd.DataFrame(crcs)
unique_crcs = df.crc.unique().tolist()
unique_idx = []
for crc in unique_crcs:
unique_idx.append(all_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'}}
Подробное решение
1. Создать данные
import pandas as 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.DataFrame(crcs)
print(df)
Вывод :
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
Выбрать уникальные строки CRC
unique_crcs = df.crc.unique().tolist()
all_crcs = df.crc.to_list()
unique_idx = []
uniques = dict()
for crc in unique_crcs:
idx = all_crcs.index(crc)
uniques.update({crc: idx})
unique_idx.append(idx)
print(uniques)
print(all_crcs)
Вывод :
{'55A0669C': 0, '66B07710': 2}
['55A0669C', '55A0669C', '66B07710', '66B07710']
Создание Dict только с уникальными CRC Redords
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'}}