Ich habe eine Liste von Wörterbuch enthält Listen mit:Python Liste der Wörterbücher Listen Verständnis
a = [{'alpha': 'a', 'val': 10, 'num': ['one', 'two']},
{'alpha': 'b', 'val': 22, 'num': ['two']},
{'alpha': 'c', 'val': 1, 'num': ['seven']},
{'alpha': 'a', 'val': 10, 'num': ['three','nine']},
{'alpha': 'b', 'val': 9, 'num': ['two', 'four']}]
Der Ausgang ich will, ist:
[{'alpha': 'a', 'TotalVal': 20, num: ['one', 'two', 'three', 'nine'], 'numlen': 4},
{'alpha': 'b', 'TotalVal': 31, num: ['two', 'four'], 'numlen': 2},
{'alpha': 'c', 'val': 1, 'num': ['seven'], 'numlen': 1}]
Ich habe versucht, die folgenden:
sumVal = collections.defaultdict(float)
for info in a:
sumVal[info['alpha']] += info['val']
sumVal = [{'alpha': c, 'TotalVal': sumVal[c]} for c in sumVal]
numList = collections.defaultdict(list)
for info in a:
numList[info['alpha']].append(info['num'])
numList = [{'alpha': k, 'num': set(v), 'len': len(set(v))} for k, v in numList.items()]
def merge_lists(l1, l2, key):
merged = {}
for item in l1+l2:
if item[key] in merged:
merged[item[key]].update(item)
else:
merged[item[key]] = item
return [val for (_, val) in merged.items()]
final = merge_lists(sumVal, numList, 'alpha')
Ich bekomme nicht die gewünschte Ausgabe für numList
. Erhalte den folgenden Fehler.
TypeError: unhashable type: 'list'
Wie kann ich die gewünschte Ausgabe in weniger Schritten erhalten und den Fehler loswerden?
Mögliche Duplikat [Python-Wörterbuch: Typeerror: unhashable Typ: 'list'] (http://stackoverflow.com/questions/8532146/python-dictionary-typeerror-unhashable-type-list) –
können Sie erklären, was Ihre korrekte Ausgabe sein soll. Zeigen Sie auch vollständige Rückverfolgung in Ihrer Frage –
@joelgoldstick Ich habe es erwähnt, die zweite Liste von oben sollte die endgültige Ausgabe sein. – Blabber