微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

验证一个键是否是字典中另一个键的子字符串

如何解决验证一个键是否是字典中另一个键的子字符串

我是 python 的新手,我想知道如何找出一个键是字典中另一个键的子字符串。我有一本字典的例子:

dictionary = {'modulus of elasticity': 24,'cross validation': 16,'mechanical properties': 16,'elasticity': 2}

我试过的代码

for k in dictionary.keys():
    res = [ d for d in dictionary.keys() if d in k ]
    if res:
        if(len(d) > len(k)):
            print(d,"is longer than ",k)
    else:
        pass

对于我的代码,我知道它会得到 NameError: name 'd' is not defined错误,因为实际上我不知道当 k 和 d 之间有子字符串时如何捕获它们的值他们。在我的情况下,我想遍历字典中的键并验证当前键是否是整个字典中另一个键的子字符串。例如,如果第一个键像 弹性模量,我想检查它旁边的其他键是否包含它,直到字典结束,当然当我们循环直到 elasticity 我们将看到弹性弹性模量的子串,但反之则不然。在这种情况下,我想同时捕获关键弹性和关键弹性模量以在 if 语句中打印:弹性模量比弹性 或者在其他情况下,我也想操纵它们的值。这个怎么做?任何帮助将非常感激!谢谢!

解决方法

您需要做的是:

  1. 从字典中获取所有键。

  2. 对于每个键,搜索以查看它是否是另一个键的子字符串。如果是这种情况,请打印它。否则继续下一个。

    keys = list(dictionary.keys())
    for key in keys:
        for other_key in keys:
            if key == other_key:
                continue
            else:
                if key in other_key:
                    print(key + ' is a substring of ' + other_key)
    
,

d 仅在列表推导式中定义,这里有一个更简单的方法来实现:

dictionary = {'modulus of elasticity': 24,'cross validation': 16,'mechanical properties': 16,'elasticity': 2}


for k in dictionary.keys():
    for k2 in dictionary.keys():
        if k != k2 and k in k2: print(k2,"is longer than ",k)

>>> modulus of elasticity is longer than  elasticity

我们遍历字典的键两次,检查它们是否不是同一个键,否则验证一个是否是另一个的子串。

,

您不必每次循环迭代都从列表的开头扫描,这只是额外的 CPU 周期,而是按键的长度对列表进行排序,然后在每次迭代时从当前迭代的下一项开始值,按照以下代码:

>>> keys = sorted(dictionary.keys(),key=lambda k: len(k))
>>> 
>>> for index,key_out in enumerate(keys):
        for key_in in keys[index+1:]:
            if (key_out in key_in) and (key_out != key_in):
                print('[' + key_out + ']' + ' is a substring of [' + key_in + ']')

            
[elasticity] is a substring of [modulus of elasticity]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。