【问题标题】:Python: how to remove a value from a dict if it exactly matches the key?Python:如果它与键完全匹配,如何从字典中删除一个值?
【发布时间】:2017-08-11 04:39:59
【问题描述】:

因为键有多个值,我想删除与键本身相同的值?也就是我有一本字典jumps

jumps = {'I6': ['H6', 'I6', 'I5'], 'T8' : ['T6', 'S6', 'T8']}

我想从'I6' 键中删除值'I6',并从'T8' 键中删除'T8'。我怎么能这样做?我在解析字符串与值时混淆了。

【问题讨论】:

  • 答案可以从here找到。这是重复的问题。
  • @bismute:在那个答案中,一个 整个 键及其对应的值被删除,这里的值是“操纵的”。

标签: python list dictionary frame


【解决方案1】:

另一种可能的方式可能是:

{vals.remove(val) for key,vals in jumps.items() for val in vals if val == key}

由于它引用的是值列表或数组,因此从列表中删除将影响jumps 的值。

【讨论】:

  • 在调用之后,它会改变jumps。尽管时间复杂度可能不高,但是它不会节省空间吗,因为除了jumps 之外我们没有使用任何东西({None} 将是额外的空间)?
【解决方案2】:
for key in jumps:
    jumps[key].remove(key)

【讨论】:

    【解决方案3】:

    有一个名为remove 的内置命令将从列表中删除一个项目。我们可以通过使用字符串键从我们的dictionary 访问元素开始。该值恰好是一个列表,然后我们可以对其使用remove 命令。

    这是您要演示的清单:

    jumps = {
        'I6': [ # we are accessing this value that happens to be a list
            'H6',
            'I6', #then Python will sort for and remove this value
            'I5'
        ],
        'T8' : [
            'T6',
            'S6',
            'T8'
        ]
    }
    
    
    
    jumps = {'I6': ['H6', 'I6', 'I5'], 'T8' : ['T6', 'S6', 'T8']}
    
    jumps['I6'].remove('I6')
    jumps['T8'].remove('T8')
    print(jumps)
    

    【讨论】:

      【解决方案4】:

      您可以将 单行字典推导列表推导 一起使用:

      result = {<b>k</b>:[vi for vi in <b>v</b> if <b>k</b> != vi] for <b>k,v</b> in jumps.items()}

      这会导致:

      >>> {k:[vi for vi in v if k != vi] for k,v in jumps.items()}
      {'T8': ['T6', 'S6'], 'I6': ['H6', 'I5']}
      

      请注意,您将从列表中删除与键相同的 所有 元素。此外,删除过程针对 所有 键完成。

      代码的工作方式如下:我们遍历jumps 字典中的每个键值对k,v。然后对于每个这样的对,我们在结果字典中构造一个键,并将[vi for vi in v if k != vi]与它相关联。这是一个列表理解,我们过滤掉所有等于kv 值。所以只剩下vis(按顺序)是k != vi

      【讨论】:

      • 这很有意义,而且效果很好,此外,感谢您的帮助解释!如果允许,我会将其标记为答案!
      【解决方案5】:

      为我工作

      jumps = {'I6': ['H6', 'I6', 'I5'], 'T8' : ['T6', 'S6', 'T8']}
      
      key = 'I6'
      
      if key in jumps[key]:
          jumps[key].remove(key)
      
      print(jumps)
      

      【讨论】:

        猜你喜欢
        • 2018-12-24
        • 1970-01-01
        • 2019-10-26
        • 1970-01-01
        • 2021-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多