2 回答

TA貢獻1848條經驗 獲得超2個贊
您可以使用迭代器迭代項目并附加到before列表。當找到您要查找的鍵時,break從該循環開始,然后使用同一迭代器再次迭代以讀取列表的值after。
from collections import OrderedDict
d = OrderedDict([('1',
OrderedDict([('Col1', 'Val1'),
('Col2', 'Val2'),
('output', 'Out1')])),
('2',
OrderedDict([('Col1', 'Val1'),
('Col2', 'Val2'),
('output', 'Out1')])),
('3',
OrderedDict([('Col1', 'Val1'),
('Col2', 'Val2'),
('output', 'Out1')])),
('4',
OrderedDict([('Col1', 'Val1'),
('Col2', 'Val2'),
('output', 'Out1')]))])
def vals_before_and_after(od, key):
it = iter(od.items())
before_vals = []
for k, v in it:
if k == key:
break
before_vals.append(v)
after_vals = [v for k, v in it]
return before_vals, after_vals
before = OrderedDict()
after = OrderedDict()
for k, v in d.items():
before[k], after[k] = vals_before_and_after(v, 'output')
print(before)
print(after)
給出:
OrderedDict([('1', ['Val1', 'Val2']), ('2', ['Val1', 'Val2']), ('3', ['Val1', 'Val2']), ('4', ['Val1', 'Val2'])])
OrderedDict([('1', []), ('2', []), ('3', []), ('4', [])])
如果您正在查找的密鑰從未找到(break從未執行過),您也可能會引發異常。例如:
...
for k, v in it:
if k == key:
break
before_vals.append(v)
else:
raise RuntimeError(f'The key {key} was not found')
...

TA貢獻1851條經驗 獲得超4個贊
您可以使用字典理解:
dx = {k: list({i:x for i, x in v.items() if x != 'Out1'}.values()) for k,v in d.items()}
print(dx)
{'1': ['Val1', 'Val2'],
'2': ['Val1', 'Val2'],
'3': ['Val1', 'Val2'],
'4': ['Val1', 'Val2']}
添加回答
舉報