【问题标题】:Replace dictionary values according to dictionary根据字典替换字典值
【发布时间】:2015-10-30 18:35:51
【问题描述】:

我有两本词典。 一个包含以下方式的数据d['name']=[something,{attribute:placeholder}] 所以一个包含一个列表的字典(不是我最初所说的数组)包含一个字典,其中的值是占位符字母组合而不是唯一的。

另一个字典包含s['placeholder']=value

我想将 d 中的所有占位符替换为 s 中对应的值。

有什么方法可以有效地做到这一点,而不是通过循环遍历 d 属性中每个条目的 s 字典?

【问题讨论】:

  • 纯python中没有数组。你得到的是一个简单的列表,里面有一本字典。
  • @ascenator:实际上,there are。但是 OP 确实没有使用它们,它们在这里有 list 对象。
  • @MartijnPieters:是的,但它真的是一个数组吗?一个带有 append 和 stuff 之类的类在我看来就像另一个 python 包装器对象。或者它是否真的在内部使用了一个数组,并在使用 append 之类的方法时创建一个容量更大的新数组并从旧数组中复制值?访问任何单个值时是否为 O(1)?
  • @ascenator:Python list 类型在下面使用动态 C 数组。但是,您没有将您理解的内容限定为数组。
  • @MartijnPieters:一种数据结构,由具有相同(原始)数据类型的元素组成,容量固定,因为底层内存只分配一次,因此值在内存中按顺序排列,授予访问权限每个值的 O(1)。

标签: python performance parsing dictionary


【解决方案1】:

不,你必须循环。你可以在这里使用字典理解:

d = {name: [v[0], {attr: s[placeholder] for attr, placeholder in v[1].items()}]
     for name, v in d.items()}

这将重建整个结构,将嵌套字典中的值替换为通过s 映射占位符。

【讨论】:

  • 谢谢!你能解释一下,这里到底发生了什么吗?
  • documentationthe tutorial{key: value for ...} 表达式从循环构建字典。我只是嵌套了构建外部字典值的技术。
  • 啊,是的,我想我明白了。不过,我需要不嵌套,因为可以有多个值或根本没有。总之,谢谢,问题解决了!
猜你喜欢
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 2018-01-10
  • 2022-11-23
  • 2021-07-13
  • 2013-11-15
相关资源
最近更新 更多