代码之家  ›  专栏  ›  技术社区  ›  ThatQuantDude

更新字典中特定位置的所有值

  •  3
  • ThatQuantDude  · 技术社区  · 7 年前

    我有一本这样的字典

    dict_ = {'ALPHA':(["data['ALPHA']", 'EMPTY'], 'N', 'N', 1),'BETA':(["data['BETA']", 'EMPTY'], 'N', 'N', 2),'GAMMA':(["data['GAMMA']", 'EMPTY'], 'N', 'N', 3)} 
    

    我想在每个值元组的最后一个整数中添加一个常数,以获得

    dict_ = {'ALPHA':(["data['ALPHA']", 'EMPTY'], 'N', 'N', 6),'BETA':(["data['BETA']", 'EMPTY'], 'N', 'N', 7),'GAMMA':(["data['GAMMA']", 'EMPTY'], 'N', 'N', 8)} 
    

    我试过了

    offset = 5
    dict_.update((x, y[3]+offset) for x, y in dict_.items())
    

    这导致

    {'ALPHA': 6, 'BETA': 7, 'GAMMA': 8}
    

    有没有更好的方法来保留结构的其余部分,并且只更新所需的位置?

    3 回复  |  直到 7 年前
        1
  •  2
  •   Daniel Roseman    7 年前

    您无法就地更新这些值,因为它们是元组。因此,您需要迭代并使用偏移量重新生成每个。

    for k, v in dict_.items():
        dict_[k] = v[:-1] + (v[-1] + offset,)
    
        2
  •  1
  •   Daniel Lenz    7 年前

    下面是一个dict理解:

    # Your input dict
    dict_ = {
        'ALPHA':(["data['ALPHA']", 'EMPTY'], 'N', 'N', 1),
        'BETA':(["data['BETA']", 'EMPTY'], 'N', 'N', 2),
        'GAMMA':(["data['GAMMA']", 'EMPTY'], 'N', 'N', 3)}
    
    # The offset for the last value of the tuple
    offset = 5
    
    # The updated dict
    dict_offset = {
        key: value[:-1] + (value[-1] + offset, ) for key, value in dict_.items()}
    
        3
  •  0
  •   Ajax1234    7 年前

    你可以试试这个:

    dict_ = {'ALPHA':(["data['ALPHA']", 'EMPTY'], 'N', 'N', 1),'BETA':(["data['BETA']", 'EMPTY'], 'N', 'N', 2),'GAMMA':(["data['GAMMA']", 'EMPTY'], 'N', 'N', 3)} 
    final_dict = {a:tuple(list(b)[:-1]+[list(b)[-1]+5]) for a, b in dict_.items()}
    

    输出:

    {'ALPHA': (["data['ALPHA']", 'EMPTY'], 'N', 'N', 6), 'BETA': (["data['BETA']", 'EMPTY'], 'N', 'N', 7), 'GAMMA': (["data['GAMMA']", 'EMPTY'], 'N', 'N', 8)}
    

    这是期望的输出。