我需要遍历字典的帮助。这可能不是很聪明的方法,但是我需要尝试。
我有这样的命令:
{'a': 'b',
'b': 'c',
'c': 'd',
'm':'n',
'p':'r',
'r': 't'}
我需要作为输出,它可以是dict或dataframe:
'a' : ['b', 'c', 'd'],
'b' : ['c', 'd'],
'c': ['d'],
'm': ['n'],
'p': ['r', 't'],
'r': ['t']
我尝试过:
dict_output = {}
for k, v in my_dict.items():
lista = []
for ki, va in my_dict.items():
if v in ki:
lista.append(va)
dict_l.update({k:lista})
但这只重复一次,直到链断裂之前,我不知道如何再次重复。
定义一个小函数(例如get_key
),以递归遍历字典(例如,oct)
然后yield
逐个键入关键字):
def get_key(dct, key):
while key in dct:
key = dct[key]
yield key
现在,通过调用get_key
dict理解来构建新词典。
{k : list(get_key(dct, k)) for k in dct}
{'a': ['b', 'c', 'd'],
'b': ['c', 'd'],
'c': ['d'],
'm': ['n'],
'p': ['r', 't'],
'r': ['t']}
处理循环
请注意,如果您的“图形”具有循环(a:b和b:a),这不会终止。您可以通过维护一组visited
节点来解决此问题:
def get_key_handle_cycles(dct, key):
visited = set()
while key in dct and key not in visited:
visited.add(key)
key = dct[key]
yield key
并以相同的方式调用此函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句