python - 遍历字典,搜索副本并将副本列表附加到列表中
问题描述
我正在尝试遍历字典以搜索副本,将这些副本(它们存在的地方)添加到列表中,然后将该列表附加到另一个列表中,该列表将包含所有副本作为子列表。比如 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])
我已经尝试过解决这个问题,但我不明白为什么它会列出重复项。
解决方案
这是你要找的吗?
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']]
推荐阅读
- flutter - 如何在不改变屏幕/页面的情况下传递数据?
- kubernetes - 是否可以在容器内的 env 中将 application.properties 的内容作为键/值对公开?
- javascript - 使用 node.js 处理来自 aws s3 getobject 的数百万条记录并通过分页将记录返回到前端的最佳方法
- python - Django 连接错误(Oracle 11g 数据库)
- vba - 使用手动干预将单词表转换为文本
- angular - 由于我们在 d3 v3 中具有标注功能,有没有办法在 d3 v5 中自动放置标签而不重叠?
- angular - 拉入模型 ID 以保存其他模型的形式
- javascript - async/await Promise.all() 但在承诺解决时得到响应
- javascript - 如何以角度显示多张地图?
- twitter-bootstrap-3 - .scss 文件无法从引导程序加载卡类