更新字典元素

时间:2017-02-27 09:03:46

标签: python dictionary

我有一个字典,其中键作为字符串,长度为6的列表作为值。该列表由一个字典组成,该字典的密钥为字符串,它的相应值为例如

{ 'conv_01': [{'high': 0},
  {'low': 16},
  {'cummulative': 121.41315},
  {'min': -3.2385397},
  {'max': 46.390823364257813},
  {'pos': 1}] }

更新此词典元素的最有效方法是什么。对于例如如果我想将pos更新为 18

{'conv_01': [{'high': 0},
  {'low': 16},
  {'cummulative': 121.41315},
  {'min': -3.2385397},
  {'max': 46.390823364257813},
  {'pos': 18}] } # Expected output

根词典的总体大小很大,因此效率很重要。

UPADTE w.r.t.评论

  1. 列表的顺序始终相同,因为这将始终位于第6位。
  2. 为什么我使用这种结构,即dict {[dict {k,v},dict2 {k,v}]}?我以这种方式获得了数据。虽然,我一定会尝试建议删除列表并使用dict。

1 个答案:

答案 0 :(得分:1)

如果给定键的位置不变,只需直接使用它:

new_value = 18
d['conv_01'][-1]['pos'] = new_value  # last entry
d['conv_01'][5]['pos'] = new_value   # 6th entry

如果密钥是可变的或条目的顺序未知,则需要执行搜索。使用列表推导来重新构建列表:

key, new_value = 'pos', 18
d['conv_01'] = [{key: new_value} if key in d else d for d in d['conv_01']]

但是,如果您需要重复进行此类更改,那么将您的词典列表预先转换为一个字典会更加高效,然后直接使用该键:

d['conv_01'] = dict(next(iter(d.items())) for d in d['conv_01'])
d['conv_01][key] = new_value

这假设嵌套词典中的所有键都是唯一的。