を理解:Pythonのリスト、私はリストを含む辞書のリストを持っている
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']}]
私が欲しいの出力は次のようになります。
[{'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}]
私は次のことを試してみました:
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')
numList
の出力が得られません。次のエラーを取得します。
TypeError: unhashable type: 'list'
希望の出力をより少ないステップで取得してエラーを取り除くにはどうすればよいですか?
の可能性のある重複した[Pythonの辞書:TypeError例外:非ハッシュタイプ: 'リスト'](http://stackoverflow.com/questionsここに私が思い付いた最も簡単な解決策です/ 8532146/python-dictionary-typeerror-unhashable-type-list) –
あなたの正しい出力は何かを説明できますか?また、あなたの質問に完全なトレースバックを表示 –
@joelgoldstick私はそれを言及している、上から2番目のリストは、最終的な出力でなければなりません。 – Blabber