Điều đầu tiên cần lưu ý là bạn không có hai từ điển khác nhau. Bạn có hai danh sách từ điển khác nhau. Thứ hai là bạn không giải thích chính xác những gì được tính là một bản sao. Thứ ba là bạn không nói phải làm gì với khóa relevance.
Tôi sẽ giả sử rằng hai từ điển với các khóa tương đương type và name là giống hệt nhau và bạn muốn các giá trị relevance được hợp nhất vào một danh sách. Sau đó, bạn có thể trung bình chúng, hoặc bất cứ điều gì.
def gen_key(d): return (d['name'], d['type']) def merge_dupes(dlist): relevance = [float(d['relevance']) for d in dlist] name, type = dlist[0]['name'], dlist[0]['type'] return {'name':name, 'type':type, 'relevance':relevance} to_merge = {} for l in (x, y): for d in l: to_merge.setdefault(gen_key(d), []).append(d) # if you want another list merged_list = [merge_dupes(l) for l in to_merge.itervalues()] # if you'd prefer a dictionary merged_dict = dict((k, merge_dupes(v)) for k, v in to_merge.iteritems())Output:
>>> pprint(merged_list) [{'name': u'Rob Hirschfeld', 'relevance': [0.44458599999999998], 'type': u'Person'}, {'name': 'VMs', 'relevance': [0.314, 0.52216899999999999], 'type': 'OperatingSystem'}, {'name': 'Greg Althaus', 'relevance': [0.32700000000000001, 0.41398800000000002], 'type': 'Person'}, {'name': 'Storage Hardware', 'relevance': [0.17399999999999999], 'type': 'Company'}, {'name': u'iSCSI', 'relevance': [0.37648900000000002], 'type': u'FieldTerminology'}, {'name': 'Force10', 'relevance': [0.26600000000000001, 0.31405899999999998], 'type': 'Company'}, {'name': '//Dell.com/OpenStack', 'relevance': [0.085000000000000006], 'type': 'URL'}, {'name': 'Dell', 'relevance': [0.72199999999999998, 0.87406499999999998], 'type': 'Company'}, {'name': 'iSCSI', 'relevance': [0.122], 'type': 'Technology'}] >>> pprint(merged_dict) {('Dell', 'Company'): {'name': 'Dell', 'relevance': [0.72199999999999998, 0.87406499999999998], 'type': 'Company'}, ('Force10', 'Company'): {'name': 'Force10', 'relevance': [0.26600000000000001, 0.31405899999999998], 'type': 'Company'}, ('Greg Althaus', 'Person'): {'name': 'Greg Althaus', 'relevance': [0.32700000000000001, 0.41398800000000002], 'type': 'Person'}, (u'Rob Hirschfeld', u'Person'): {'name': u'Rob Hirschfeld', 'relevance': [0.44458599999999998], 'type': u'Person'}, ('Storage Hardware', 'Company'): {'name': 'Storage Hardware', 'relevance': [0.17399999999999999], 'type': 'Company'}, ('VMs', 'OperatingSystem'): {'name': 'VMs', 'relevance': [0.314, 0.52216899999999999], 'type': 'OperatingSystem'}, ('//Dell.com/OpenStack', 'URL'): {'name': '//Dell.com/OpenStack', 'relevance': [0.085000000000000006], 'type': 'URL'}, (u'iSCSI', u'FieldTerminology'): {'name': u'iSCSI', 'relevance': [0.37648900000000002], 'type': u'FieldTerminology'}, ('iSCSI', 'Technology'): {'name': 'iSCSI', 'relevance': [0.122], 'type': 'Technology'}}Chúng ta có thể sử dụng sự hiểu biết vòng lặp hoặc từ điển để loại bỏ các bản sao khỏi từ điển trong Python. Trong khi loại bỏ giá trị trùng lặp khỏi từ điển, các khóa cũng được loại bỏ trong quá trình.
Nếu bạn không quan tâm đến việc giữ lại thứ tự ban đầu thì set(my_list) sẽ loại bỏ tất cả các bản sao.
Mã ví dụ đơn giản.
Sử dụng cho vòng lặp
Đây là phương pháp vũ phu, trong đó thêm giá trị trước tiên xảy ra trong một biến và loại bỏ nó nếu nó lặp lại.
dict1 = {'A': 20, 'B': 15, 'C': 20, 'D': 10, 'E': 20} temp = [] res = dict() for key, val in dict1.items(): if val not in temp: temp.append(val) res[key] = val print(res)Đầu ra::
Sử dụng từ điển hiểu
Phương pháp này làm giống như trên nhưng nó là một tốc ký.
dict1 = {'A': 20, 'B': 15, 'C': 20, 'D': 10, 'E': 20} temp = {val: key for key, val in dict1.items()} res = {val: key for key, val in temp.items()} print(res)Đầu ra: {’e,: 20,‘ B,: 15, ‘Diên: 10}: {‘E’: 20, ‘B’: 15, ‘D’: 10}
Viết một chương trình Python để loại bỏ các bản sao khỏi từ điển
Dưới đây là một ví dụ Python cho thấy cách xóa các giá trị trùng lặp khỏi từ điển.
student_data = {'id1': {'name': ['Sara'], 'class': ['V'], 'subject_integration': ['english, math, science'] }, 'id2': {'name': ['David'], 'class': ['V'], 'subject_integration': ['english, math, science'] }, 'id3': {'name': ['Sara'], 'class': ['V'], 'subject_integration': ['english, math, science'] }, 'id4': {'name': ['Surya'], 'class': ['V'], 'subject_integration': ['english, math, science'] }, } res = {} for key, value in student_data.items(): if value not in res.values(): res[key] = value print(res)Hãy bình luận nếu bạn có bất kỳ nghi ngờ và đề xuất nào về hướng dẫn từ điển Python này.
Lưu ý: IDE: & NBSP; Pycharm & NBSP; 2021.3.3 (Phiên bản cộng đồng) IDE: PyCharm 2021.3.3 (Community Edition)
Windows 10
Python 3.10.1
Tất cả & nbsp; ví dụ python & nbsp; là trong & nbsp; Python & nbsp; 3, vì vậy có thể khác với các phiên bản Python 2 hoặc nâng cấp. Python Examples are in Python 3, so Maybe its different from python 2 or upgraded versions.
Bằng cấp về Khoa học máy tính và Kỹ sư: Nhà phát triển ứng dụng và có nhiều ngôn ngữ lập trình kinh nghiệm. Sự nhiệt tình cho công nghệ và thích học kỹ thuật.