我试图遍历字典以搜索副本,将这些副本(如果存在的话)添加到列表中,然后将该列表追加到另一个包含所有副本作为子列表的列表中。例如
a.jpg b.jpg和c.jpg都是同一张图片,并且都是副本。 1.jpg和2.jpg也是同一张照片,因此也是每张照片的副本,因此最终列表copies
将包含2个子列表:copies = [[a.jpg, b.jpg, c.jpg], [1.jpg, 2.jpg]]
这是我的代码:
def deal_with_dubs():
print("FILES: ", FILE_HASH_DICTIONARY)
for file1 in FILE_HASH_DICTIONARY:
#print (str(file1))
count = 0
copy = []
copy.append(file1)
for file2 in FILE_HASH_DICTIONARY:
if FILE_HASH_DICTIONARY[file1] == FILE_HASH_DICTIONARY[file2]:
count = count +1
if count > 1:copy.append(file2)
if len(copy) > 1 and copies.__contains__(copy) == False:copies.append(copy)
copies.sort()
for n in copies:print(n)
我得到的输出是:
('FILES: ', {'stuff.jpg': '06a7c9413b2a36bf78dcc981f2f6873fa9a82e00', '2.jpg': '9687f69f124876cbdb98045617c37df46e13a594', 'test.py': '41ddcacda888fbb43791825fff6855de94c1e3fe', 'dubs.py': '574c4570038820d81bcbe4cf8cdadcf9db2c7820', 'Elliot.jpg': '0a3cbb6c58ad7f9ddcd40c7c73c02c75a012800f', '1.jpg': '9687f69f124876cbdb98045617c37df46e13a594', 'hello_friend.jpg': '06a7c9413b2a36bf78dcc981f2f6873fa9a82e00', 'blade15-2020-gallery-05.jpg': '06a7c9413b2a36bf78dcc981f2f6873fa9a82e00', '.DS_Store': '980b43f31413a0e94ae62ec9e5ec546bee9fe16b', 'nnnn.jpg': '06a7c9413b2a36bf78dcc981f2f6873fa9a82e00', 'test2.py': 'e05f020b979c5f03348d85dc138f7bed07101c6b', 'blah.jpg': '0a3cbb6c58ad7f9ddcd40c7c73c02c75a012800f'})
['1.jpg', '1.jpg']
['2.jpg', '1.jpg']
['Elliot.jpg', 'blah.jpg']
['blade15-2020-gallery-05.jpg', 'hello_friend.jpg', 'blade15-2020-gallery-05.jpg', 'nnnn.jpg']
['blah.jpg', 'blah.jpg']
['hello_friend.jpg', 'hello_friend.jpg', 'blade15-2020-gallery-05.jpg', 'nnnn.jpg']
['nnnn.jpg', 'hello_friend.jpg', 'blade15-2020-gallery-05.jpg', 'nnnn.jpg']
['stuff.jpg', 'hello_friend.jpg', 'blade15-2020-gallery-05.jpg', 'nnnn.jpg']
这是在捕获副本(在这种情况下:
[Elliot.jpg, blah.jpg],
['blade15-2020-gallery-05.jpg', 'hello_friend.jpg', 'blade15-2020-gallery-05.jpg', 'nnnn.jpg'] and['2.jpg', '1.jpg'], there are multiple file copies, like [1.jpg, 1.jpg])
我已经尝试过解决这个问题,但是我不明白为什么它会列出重复项。
答案 0 :(得分:1)
这是您要找的吗?
files = {'stuff.jpg': '06a7c9413b2a36bf78dcc981f2f6873fa9a82e00',
'2.jpg': '9687f69f124876cbdb98045617c37df46e13a594',
'test.py': '41ddcacda888fbb43791825fff6855de94c1e3fe',
'dubs.py': '574c4570038820d81bcbe4cf8cdadcf9db2c7820',
'Elliot.jpg': '0a3cbb6c58ad7f9ddcd40c7c73c02c75a012800f',
'1.jpg': '9687f69f124876cbdb98045617c37df46e13a594',
'hello_friend.jpg': '06a7c9413b2a36bf78dcc981f2f6873fa9a82e00',
'blade15-2020-gallery-05.jpg': '06a7c9413b2a36bf78dcc981f2f6873fa9a82e00',
'.DS_Store': '980b43f31413a0e94ae62ec9e5ec546bee9fe16b',
'nnnn.jpg': '06a7c9413b2a36bf78dcc981f2f6873fa9a82e00',
'test2.py': 'e05f020b979c5f03348d85dc138f7bed07101c6b',
'blah.jpg': '0a3cbb6c58ad7f9ddcd40c7c73c02c75a012800f'}
from collections import defaultdict
def deal_with_dubs(files):
hash_to_names = defaultdict(list)
for name, hash_k in files.items():
hash_to_names[hash_k].append(name)
copies = []
for names in hash_to_names.values():
if len(names) > 1:
names.sort()
copies.append(names)
print(copies)
deal_with_dubs(files)
输出:
[['blade15-2020-gallery-05.jpg', 'hello_friend.jpg', 'nnnn.jpg', 'stuff.jpg'], ['1.jpg', '2.jpg'], ['Elliot.jpg', 'blah.jpg']]