我有一个字典,其中条目值可以通过键引用另一个条目,最终以没有当前值条目或遇到“-”结束。该数据结构的目标是为每个条目找到父级,并将“-”转换为 None。例如:
d = {'1': '-', '0': '6', '3': '1', '2': '3', '4': '5', '6': '9'}
- “1”是映射到“-”的根,因此它的结果应该是None。
- “0”有一个“6”的父项,“6”有一个父项“9”,因此它的结果应该是“9”。
- “3”有一个“1”的父级,它映射到“-”,所以它应该导致 None。
- “2”有“3”的父级,“3”有一个“1”的父级映射到“-”,因此它应该导致无。
- “4”应该留在“5”的父级
- “6”应该留在“9”的父级
我的详细解决方案如下:
d = {'1': '-', '0': '6', '3': '1', '2': '3', '4': '5', '6': '9'}
print(d)
for dis, rep in d.items():
if rep == "-":
d[dis] = None
continue
while rep in d:
rep = d[rep]
if rep == "-":
d[dis] = None
break
else:
d[dis] = rep
print(d)
输出是:
{'1': '-', '0': '6', '3': '1', '2': '3', '4': '5', '6': '9'}
{'1': None, '0': '9', '3': None, '2': None, '4': '5', '6': '9'}
结果正确。 “1”元素没有父元素,“2”/“3”元素指向回“1”。他们也应该没有 parent 。
是否有使用 Python 3+ 实现此目的的更简洁的 Pythonic 方式?
最佳答案
要“遍历”字典,只需循环查找直到没有更多:
>>> def walk(d, val):
while val in d:
val = d[val]
return None if val == '-' else val
>>> d = {'1': '-', '0': '6', '3': '1', '2': '3', '4': '5', '6': '9'}
>>> print {k: walk(d, k) for k in d}
{'1': None, '0': '9', '3': None, '2': None, '4': '5', '6': '9'}
关于dictionary - 遍历自引用字典的 Pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220550/