python - 如何检查键是否存在于Python中的值和键中的值中
问题描述
我需要帮助来遍历字典。这可能不是那么聪明的做法,但我需要尝试。
我有一个这样的字典:
{'a': 'b',
'b': 'c',
'c': 'd',
'm':'n',
'p':'r',
'r': 't'}
我需要什么作为输出,它可以是字典或数据框:
'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
现在,通过在字典理解中 调用来构建你的新字典。
{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
并以相同的方式调用此函数。
推荐阅读
- ibm-cloud - IBM Cloud Classic Infrastructure 单服务器防火墙在尝试添加规则时没有规则和错误
- javascript - 在 putLogEvents 之后出现异常时的 nextSequenceToken
- css - 您可以更改 Microsoft Edge 中 :hover 上选择选项的背景颜色吗?
- javascript - Angular CDK Drag'n'zone 不尊重滚动容器、死区
- python - python,获取两个数组的所有唯一组合并将它们存储在另一个数组中
- google-sheets - 为什么我的条件格式规则不起作用?
- mysql - 查找仅购买特定产品且未购买任何其他产品的客户(MySQL)
- node.js - 是否可以向 nodemon 添加类似“rs”的命令?
- linux - Linux 内核模块:向 sysfs 公开 I²C 寄存器
- awk - 如何过滤掉 ./gradlew project:dependencies 命令的某个部分?(第 3 版)