diff list by set part 2

จากที่เมื่อวานใช้ set มาช่วยในการ diff list แล้วปรากฏว่ามันจะมีปัญหากับสมาชิกของ list ที่เป็น dict เลยจัดการแปลงสมาชิกทุกตัวให้เป็น string representative ก่อน แล้วค่อยแปลงกลับด้วย eval (ใช้ร่วมกับ list comprehensions เพื่อทำให้ code กระชับ)

def list_diff(list_a, list_b):
    set_a = set([item.__repr__() for item in list_a])
    set_b = set([item.__repr__() for item in list_b])
    set_int = set_a.intersection(set_b)
    return {'---':[eval(item) for item in list(set_a - set_int)],
            '===':[eval(item) for item in list(set_int)],
            '+++':[eval(item) for item in list(set_b - set_int)]}

เมื่อใช้งานจริงจะได้ดังนี้

In [2]: a = [{'x':123},'Hello World', 789]
In [3]: b = ['Hello World', 456, {'y':567}]
In [4]: list_diff(a,b)
Out[4]: {'+++': [{'y': 567}, 456], '---': [{'x': 123}, 789], '===': ['Hello World']}
Tar: เป็นความรู้ที่ดีมากครับ จอติดตามต่อไปเรื่อยๆนะครับ...
1 comment(s) 26/2/2009 22:19
CWT
:::All Blogs:::
Moblin 2.1 กับภาษาไทย และ wireless
STOU Graduate
Google Wave Workshop - Day 1
ภาพ HDR
หน้าต่างคอนโด
ทดสอบ libthai บน Mac OS X
วันเกิดแป๋ม
สามัญสำนึกใช่ว่าจะถูกเสมอไป
โปรดระวังการใช้ emoticon ใน pantip.com
ทดสอบ javascript ของ WebKit เทียบกับ Firefox
diff list by set part 2
diff list by set
ICT Block Web
The Cathedral And The Bazaar
สวนหลวง ร.9
โฆษณาบ่งบอกความใส่ใจ
run Django ใน mode prefork นี่น่ากลัวแฮะ
อักษรพิเศษใน Title
Thai locale in Django-SVN
เบื่อและเซ็ง
Code Sprint VS. Dev Fest
My Real Nickname and The Story of My Alias Name
My Books
หมอนรองกระดูกทับเส้นประสาท
python-markdown2
การใช้ Nginx กับ Django
ลองเล่น Django's Comments Framework
Bashell Upgraded
ช่วงนี้ซื้อแต่ HP
Work@NY - Day1
Blog เริ่มใช้งานได้แล้ว
Penguin and Dolphin
Use Squid proxy on Windows Server
Test Markdown
A Django project.
Valid XHTML 1.0 Transitio
nal