【问题标题】:Find part of value in dictionary在字典中查找部分值
【发布时间】:2017-06-12 13:35:01
【问题描述】:

我有以下字典:

["uno" : "unoValue", "dos" : "dosValue", "tres" : "tresValue"]

我需要对包含某些字符的每个键进行操作。例如,如果我寻找“否”,我只会得到键“uno”,因为“uNOValue”。如果我寻找“val”,我会得到所有三个键。

对于第二种情况,我需要获取数组中的所有键,例如 ["uno"] 和 ["uno","dos","tres"]。

我是 swift 的新手,但我正在构建一个用于搜索的虚拟应用程序,但我不知道该怎么做。如果您对搜索功能有任何其他想法,我也将不胜感激。

【问题讨论】:

  • 您的问题是关于 Python 还是 Swift?如果只是其中一个,请删除另一个标签。如果两者都有关,请edit您的问题说明清楚。
  • 所有键:dct.keys()。包含 no 的密钥:[x for x in dct.keys() if "no" in x]

标签: arrays swift dictionary search


【解决方案1】:
dict = {"uno" : "unoValue", "dos" : "dosValue", "tres" : "tresValue"}
search_term = "Val"
list = [] 
for key, value in dict.items():
    if search_term in value:
        list.append(key)
print (list)

【讨论】:

    【解决方案2】:

    试试这个:

    let dict = ["uno" : "unoValue", "dos" : "dosValue", "tres" : "tresValue"]
    
    let searchTerm = "val"
    let keys = Array(
        dict.keys.filter { dict[$0]!.range(of: searchTerm, options: [.caseInsensitive]) != nil }
    )
    
    print(keys)
    

    它是如何工作的:

    • dict.keys.filter过滤字典中满足一定条件的所有键
    • dict[$0]!.range(of: searchTerm, options: [.caseInsensitive]) != nil 检查包含搜索词的值
    • Array( ... ) 将其转换为字符串数组,否则为 LazyFilterCollection

    【讨论】:

    • 你为什么要把这个表达式放在数组初始化器中?
    • @Alexander OP 要求提供一组满足条件的键。没有它,它仍然是LazyFilterCollection
    • 是的。我认为值得一提的是,可能没有必要拥有一个数组。例如,如果 OP 只想遍历这些键,它可以保持为 LazyFilterCollection
    • 顺便说一句。您可以直接过滤字典,如下所示:dict.filter {_, value in value.range(of: searchTerm, options: [.caseInsensitive]) != nil }.map{$0.key}。它可以避免 dict[$0]! 导致的哈希查找和解包。
    【解决方案3】:

    我的游乐场示例:

    import Foundation
    
    let dict = ["uno" : "unoValue", "dos" : "dosValue", "tres" : "tresValue"]
    
    
    let searchTerm = "val"
    
    var result = dict.filter { 
        $0.value.range(of: searchTerm, options: [.caseInsensitive]) != nil
    }.map{$0.key}
    
    
    print(result) // ["tres", "uno", "dos"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 2020-07-17
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      相关资源
      最近更新 更多