我々はlst
で使用されているすべての文字キーのリストを持っていた場合、このタスクは少し簡単になるだろうが、それは簡単ですそれらを抽出するのに十分です。
私の戦略は、サブリストを辞書に変換することです。これにより、各キーに関連付けられた値を簡単に取得することが容易になります(&)。 dict.get
メソッドを使用すると、欠落しているキーのデフォルト値を指定できます。
lst = [[['a', 100],['b', 200],['d', 325]],[['a', 50],['b', 250],['c', 75]]]
# Convert outer sublists to dictionaries
dicts = [*map(dict, lst)]
# Get all the keys
keys = set()
for d in dicts:
keys.update(d.keys())
# Get data for each key from each dict, using 0 if a key is missing
final = [[k] + [d.get(k, 0) for d in dicts] for k in sorted(keys)]
print(final)
出力
[['a', 100, 50], ['b', 200, 250], ['c', 0, 75], ['d', 325, 0]]
我々は
lst = [[['a', 100],['b', 200],['d', 325]],[['a', 50],['b', 250],['c', 75]], [['a', 22], ['b', 10]]]
を使用した場合、出力は
[['a', 100, 50, 22], ['b', 200, 250, 10], ['c', 0, 75, 0], ['d', 325, 0, 0]]
です
これをPython 2で実行する場合は、外側のサブリストを辞書に変換するコードを少し変更する必要があります。 Pythonの2 & 3の両方で正しく動作そして、あなただけのPython 2上でそれを実行する必要がある場合になります
dicts = list(map(dict, lst))
に変更し、あなたは単にPythonの2リターンでmap
以来
dicts = map(dict, lst)
を行うことができますイテレータではなくリスト。itertools.chain.from_iterable()
で
なぜいくつかのアイテムは '['c'、0,75]'のようにゼロを含むべきですか? – RomanPerekhrest
'lst'はいつもその構造を持っていますか? IOW、それは常に(リスト(2つのアイテムリスト)のリストです)? –
@RomanPerekhrest最初のサブリストに 'c'"キー "が含まれていないので、OPはデフォルト値0にしたいので表示されます – Wondercricket