【问题标题】:How to access to a dictionary key using a string that contain partial string of the key?如何使用包含键的部分字符串的字符串访问字典键?
【发布时间】:2019-06-15 15:28:58
【问题描述】:

如果我有这样的钥匙:ex_key = ('a','z')

如何为包含上述 ex_key 字符的字典键添加值?

例如,使用上面的键,我试图将值附加到字典中的键 ('a',)。由于密钥('a',) 包含ex_key 的部分字符。而('a','b') 键不算数,因为ex_key('a','z')

d = {('a', 'b'): {('a', 'b', 'c')}, ('a', 'b', 'c'): {('a', 'b', 'c')}, ('a',): {('u', 'm', 'c')}}**

预期:

{('a', 'b'): {('a', 'b', 'c')}, ('a', 'b', 'c'): {('a', 'b', 'c')}, **('a',): {('a','z'), ('u', 'm', 'c')}}**

【问题讨论】:

    标签: python dictionary set tuples


    【解决方案1】:

    这是一种方法。

    例如:

    ex_key = ('a','z')
    d = {('a', 'b'): {('a', 'b', 'c')}, ('a', 'b', 'c'): {('a', 'b', 'c')}, ('a',): {('u', 'm', 'c')}}
    
    if ex_key in d:
        d[ex_key].add(ex_key)
    else:
        for k in ex_key:
            if (k,) in d:
                d[(k,)].add(ex_key)
    print(d)
    

    【讨论】:

      【解决方案2】:

      试试这个:

      for k,v in d.items():
          if all(i in ex_key for i in k):
              d[k] = v.union({ex_key})
      

      【讨论】:

      • 该条件不尊重位置。 all(a == b for a,b in zip(k, ex_key))。现在,如果它应该匹配最长的前缀,最好在 ex_key 的前缀上循环并以递减的长度探测字典。
      • @DanD。正确的。但是OP关心位置匹配吗?
      猜你喜欢
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 2021-06-16
      相关资源
      最近更新 更多