【问题标题】:want to find a matching variable from multi key possibly tuples in dict and print the value in python想从 dict 中的多键可能元组中找到匹配的变量并在 python 中打印该值
【发布时间】:2018-03-31 05:07:53
【问题描述】:

如何从多键字典中搜索变量并在 python 中获取相应的值?

dict1 = {('1700','2700','3700'):'a3g3',('1502','1518'):'a2g3',('2600'):'a3g2'}

var = '1502'

输出

应该是a2g3

【问题讨论】:

  • 字典是为通过 full 键查找而设计的。任何其他查找都将是低效的。如果字典的实际大小很大并且有多个查找,那么重塑数据结构以实现高效查找可能是个好主意。
  • 不管有没有解决方案,作为key的tuple/list并不能保证keys/sub-keys的唯一性。使用这样的东西很可能会产生灾难。

标签: python dictionary


【解决方案1】:

一种方式:

dict1 = {('1700','2700','3700'): 'a3g3',
         ('1502','1518'): 'a2g3',
         ('2600'): 'a3g2'}

print(next(v for k, v in dict1.items() if '1502' in k))
# a2g3

【讨论】:

    【解决方案2】:

    列表理解是个好方法,

    这里是过滤器的方法,只是为了好玩: 您可以过滤结果:

    dict1 = {('1700','2700','3700'):'a3g3',('1502','1518'):'a2g3',('2600'):'a3g2'}
    
    var = '1502'
    print(dict1[list(filter(lambda x:var in x,dict1.keys()))[0]])
    

    输出:

    a2g3
    

    【讨论】:

      【解决方案3】:

      只需遍历键并找到

         print([dict1[i] for i in dict1.keys() if var in i])
      

      【讨论】:

      • 仅代码答案没有帮助
      • 如果我错了,请纠正我,但是这个 sn-p 只是将 dict (hashmap) 查找时间复杂度从 O(1) 降低到 O(n) 并将返回单个值的列表或空列表。它似乎只是在复制包装在列表中的dict1.get(var)
      • @GergelyM 它将返回一个元组列表。
      • 它返回一个字符串作为单个项目列表 - 但即使找到一个字典也会迭代整个字典 -> 所以它是一定的 O(n) 查找。如果键在非唯一键中重复,此解决方案将返回多个项目 -> ('1700','1502','3700')('1502','1518')('1502') 是完全有效且唯一的键,尽管每个键的值都是 var,因此 sn -p 将返回 3 个值作为列表...否则,我更喜欢您的答案作为其他解决方案。
      • 它会像你说的那样返回
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多