下面介紹如何創建一個在兩個列表中跳過重疊鍵的字典。
使用set intersection找到鑰匙在兩個列表:
listA = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
listB = ['g', 'h', 'i', 'j', 'k', 'l']
di={k:v for v,k in enumerate(listA,1) if k not in set(listA) & set(listB)}
i=max(di.values())
di.update({k:v for v,k in enumerate(listB,i) if k not in set(listA) & set(listB)})
i=max(di.values())
print di
# {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'f': 6, 'i': 8, 'h': 7, 'k': 10, 'j': 9, 'l': 11}
然後再用交集創建重疊鍵的兩個鍵。在這一步,你可能會失去一些按鍵的順序重疊,因爲集合是無序的:
for e in set(listA) & set(listB):
di['listA.'+e]=max(di.values())+1
di['listB.'+e]=max(di.values())+1
print di
# {'a': 1, 'listB.g': 13, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'f': 6, 'i': 8, 'h': 7, 'k': 10, 'j': 9, 'l': 11, 'listA.g': 12}
您可以使用相同的技術來交錯兩個列表和類型的字典:
listA = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
listB = ['g', 'h', 'i', 'j', 'k', 'l']
dic1 = {'a':'1', 'b':'2', 'c':'3', 'd':'4', 'e':'5', 'f':'6', 'g':'10', 'z':'11'}
dic2 = {'g':'55', 'h':'56', 'i':'56', 'j':'57', 'k':'58', 'l':'59', 'x':'10', 'z':'11'}
di={k:dic1.get(k, None) for k in listA if k not in set(listA) & set(listB)}
di.update({k:dic2.get(k, None) for k in listB if k in set(listB)-set(listA) and k not in set(listA) & set(listB)})
for e in set(listA) & set(listB):
di['dic1.'+e]=dic1.get(e, None)
di['dic2.'+e]=dic2.get(e, None)
print di
# {'a': '1', 'c': '3', 'b': '2', 'e': '5', 'd': '4',
'f': '6', 'i': '56', 'h': '56', 'k': '58', 'j': '57',
'l': '59', 'dic1.g': '10', 'dic2.g': '55'}
是期望結果:'{a:g,b:h,c:i,...}'? – ericmjl
你能告訴我們你想創建的字典嗎? – mhlester
你在找'dic1.update(dic2)'? – mhlester