>>> dict1 = dict(arrayOne)
>>> dict2 = dict(arrayTwo)
>>> keyset = set(dict1.keys() + dict2.keys())
>>> [[key, dict1.get(key, 0), dict2.get(key, 0)] for key in keyset]
[['james', 35, 36], ['robert', 12, 0], ['charles', 0, 45],
['michael', 28, 17], ['trevor', 0, 24], ['jack', 18, 0],
['steven', 23, 4]]
Это становится немного сложнее, если вы хотите добавить несколько столбцов;тогда словарь самый лучший.Но наличие 0
s в нужных местах становится проблемой, потому что, когда мы добавляем имя в «основной словарь», мы должны убедиться, что оно начинается со списка 0
s правильной длины.Я испытываю желание создать новый класс для этого, но сначала вот базовое решение на основе функций:
def add_column(masterdict, arr):
mdlen = len(masterdict[masterdict.keys()[0]])
newdict = dict(arr)
keyset = set(masterdict.keys() + newdict.keys())
for key in keyset:
if key not in masterdict:
masterdict[key] = [0] * mdlen
masterdict[key].append(newdict.get(key, 0))
arrayOne = [["james", 35],
["michael", 28],
["steven", 23],
["jack", 18],
["robert", 12]]
arrayTwo = [["charles", 45],
["james", 36],
["trevor", 24],
["michael", 17],
["steven", 4]]
arrayThree = [["olliver", 11],
["james", 39],
["john", 22],
["michael", 13],
["steven", 6]]
masterdict = dict([(i[0], [i[1]]) for i in arrayOne])
add_column(masterdict, arrayTwo)
print masterdict
add_column(masterdict, arrayThree)
print masterdict
Вывод:
{'james': [35, 36], 'robert': [12, 0], 'charles': [0, 45],
'michael': [28, 17], 'trevor': [0, 24], 'jack': [18, 0],
'steven': [23, 4]}
{'james': [35, 36, 39], 'robert': [12, 0, 0], 'charles': [0, 45, 0],
'michael': [28, 17, 13], 'trevor': [0, 24, 0], 'olliver': [0, 0, 11],
'jack': [18, 0, 0], 'steven': [23, 4, 6], 'john': [0, 0, 22]}