Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python – Cross Mapping ของค่า Dictionary สองชุด

บทความนี้สาธิตวิธีทำ Cross Mapping ระหว่างสอง Dictionary ที่มีค่าเป็นลิสต์ โดยใช้ setdefault() และ extend()

โค้ดตัวอย่าง

# Dictionary แรก: Key → ลิสต์ค่า
my_dict_1 = {"Python": [4, 7], "Fun": [8, 6]}

# Dictionary ที่สอง: Key → ลิสต์ค่า
my_dict_2 = {6: [5, 7], 8: [3, 6], 7: [9, 8]}

print("Dict 1:", my_dict_1)
print("Dict 2:", my_dict_2)

# Cross Mapping
my_result = {}
for key, value_list in my_dict_1.items():
    for index in value_list:
        # หาค่าใน dict_2 ที่มี key = index
        # ถ้าไม่เจอ ให้คืนลิสต์ว่าง []
        mapped_values = my_dict_2.get(index, [])
        # เพิ่มเข้าไปใน result
        my_result.setdefault(key, []).extend(mapped_values)

print("\nผลลัพธ์ Cross Mapping:")
print(my_result)

ผลลัพธ์

Dict 1: {'Python': [4, 7], 'Fun': [8, 6]}
Dict 2: {6: [5, 7], 8: [3, 6], 7: [9, 8]}

ผลลัพธ์ Cross Mapping:
{'Python': [9, 8], 'Fun': [3, 6, 5, 7]}

อธิบายขั้นตอน

Key (Dict1)Value ListLookup ใน Dict2ผลรวม
Python[4, 7]4→ไม่เจอ, 7→[9,8][9, 8]
Fun[8, 6]8→[3,6], 6→[5,7][3, 6, 5, 7]

การใช้ setdefault() และ extend()

my_result.setdefault(key, []).extend(mapped_values)
# setdefault(key, []) → ถ้า key ไม่มี ให้สร้าง key: [] แล้วคืน []
# extend([...]) → เพิ่มทุกสมาชิกจากลิสต์เข้าไป

การประยุกต์ใช้

  • การ Map ID ระหว่างระบบ (Entity Resolution)
  • Graph Traversal: Node → Neighbors → Neighbors of Neighbors
  • ETL Pipeline: แปลงรหัสระหว่างระบบต่างๆ
  • Recommendation: User → Items → Similar Items

เวอร์ชัน Dictionary Comprehension

my_result = {
    key: [v for idx in vals for v in my_dict_2.get(idx, [])]
    for key, vals in my_dict_1.items()
}
print(my_result)  # ผลลัพธ์เหมือนกัน