dictionary - 遍历自引用字典的 Pythonic 方式

标签 dictionary python-3.x python

我有一个字典,其中条目值可以通过键引用另一个条目,最终以没有当前值条目或遇到“-”结束。该数据结构的目标是为每个条目找到父级,并将“-”转换为 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/

相关文章:

Python 三元运算符和 else 中的赋值

function - 在 Elm 中使用 Dict.update 和嵌套更新函数

Python:读取超过 1M 的小型 csv 文件并写入数据库

java - SimpleXML 反序列化 Map<String, String>

python - 如何编写一个找到列表模式并将其保存为字典的函数?

python - 如何在 tkcalendar (Python) 中获取 DateEntry 的选定日期?

python3/hy - 使用 hy.eval 时,导入和全局变量不共享

python - 从 for 循环返回的元素中追加一个新列表

python - TKInter Python 检查按钮状态

jquery - 斜纹 - 如何选择多个具有相同名称的选择